【发布时间】:2014-04-02 08:08:03
【问题描述】:
我正在解雇一个模态视图控制器,它是 delegate 的 UIPickerView。
当我使用
关闭视图时 [self dismissViewControllerAnimated:YES completion:NULL];
我的应用程序崩溃了,但只有在 UIPickerView 显示并且当前是第一响应者时才会崩溃。
我发现崩溃的原因是僵尸,这种方法,[UIPicker _updateSelectedRows] 在我的仪器中显示为问题。
我可以通过在关闭视图控制器之前将 UIPicker 委托和数据源设置为 nil 来解决此问题。
我以前从来不需要这样做,是不是我遗漏了什么?
这里是呈现视图的基本框架,以模态segue 呈现。当您使用 IBAction 关闭它时,它会导致崩溃
@interface VTSecViewController () <UIPickerViewDataSource, UIPickerViewDelegate>
@property (strong, nonatomic) UIPickerView *catPicker;
@property (strong, nonatomic) NSArray *catItems;
@property (weak, nonatomic) IBOutlet UITextField *pickerTF;
@end
@implementation VTSecViewController
- (IBAction)dismpress:(id)sender
{
[self dismissViewControllerAnimated:YES completion:NULL];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.catItems = @[@"one", @"two"];
self.catPicker = [[UIPickerView alloc] init];
self.pickerTF.inputView = self.catPicker;
self.catPicker.delegate = self;
self.catPicker.dataSource = self;
[self.pickerTF becomeFirstResponder];
// Do any additional setup after loading the view.
}
#pragma mark PickerView DataSource
- (NSInteger)numberOfComponentsInPickerView: (UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [self.catItems count];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
self.pickerTF.text = self.catItems[row];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return self.catItems[row];
}
@end
这个post 有助于澄清一些事情
【问题讨论】:
-
你如何展示 UIPickerview?在操作表或其他视图控制器中?
-
作为 UITextField 的 inputView
-
您应该使用
[ self.categoryTF resignFirstResponder];来关闭pickerview。 -
是的,我正在使用 [self.view endEditing:YES];在解雇之前,但仍然有五分之一的崩溃,唯一确保没有崩溃的方法是将代表设置为零。
-
您是否多次执行 setUpCatPicker?只是想知道你是否应该只设置
self.catPicker如果它为零? (虽然抓着稻草)
标签: ios delegates crash uipickerview modalviewcontroller