我在尝试显示UIDatePicker
时遇到了一个奇怪的问题。我的应用程序有标签和导航控制器,设置如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
OneViewController *oneController = [[OneViewController alloc] initWithStyle:UITableViewStyleGrouped];
Controller.title = @"One";
UINavigationController *oneNav = [[UINavigationController alloc] initWithRootViewController:oneController];
TwoViewController *twoController = [[TwoViewController alloc] initWithStyle:UITableViewStyleGrouped];
twoController.title = @"Two";
UINavigationController *twoNav = [[UINavigationController alloc] initWithRootViewController:twoController];
UITabBarController *mainTabController = [[UITabBarController alloc] initWithNibName:nil bundle:nil];
mainTabController.viewControllers = @[oneNav, twoNav];
self.window.rootViewController = mainTabController;
[self.window makeKeyAndVisible];
return YES;
}
内容控制器是UITableViewController
的子类。在某个地方,我希望显示选择器元素,例如UIDatePicker
和更通用的UIPickerView
。我尝试从头开始创建必要的结构,这对于UIPickerView
工作正常但拒绝对UIDatePicker
起作用 - 它导致应用程序挂起并最终崩溃,而Instruments表明某些内容不断循环并分配内存中无限数量的对象,直到整个事情最终崩溃。
我发现https://github.com/TimCinel/ActionSheetPicker再一次,对于更多通用选择器(ActionSheetStringPicker
)工作正常,但在我尝试使用ActionSheetDatePicker
时以相同的方式挂起。在一个空白的应用程序中尝试这一切一切正常,但在我现有的标签栏+导航栏层次结构中它挂起,吃资源和崩溃。
发生了什么事?
我的所有视图和控制器都是以编程方式创建的,无需使用xib和故事板。
编辑:我打电话给拣货员的方式如下:
- (void) showPickerForRow:(int)row section:(int)section{
UITextField *textField = _cellTextFields[section][row];
[self.view endEditing:YES];
if (section == 1) {
switch (row) {
case 0: {
NSDate *minDate = [NSDate date];
[ActionSheetDatePicker showPickerWithTitle:@"Select Date" datePickerMode:UIDatePickerModeDate selectedDate:minDate target:self action:nil origin:textField];
}
break;
case 1: {
ActionStringDoneBlock done = ^(ActionSheetStringPicker *picker, NSInteger selectedIndex, id selectedValue) {
textField.text = selectedValue;
};
NSArray *timeSlots = [NSArray arrayWithObjects:@"8am", @"12pm", @"4pm", @"8pm", nil];
int i = [timeSlots indexOfObject:self.treatTime];
if (i == NSNotFound) i = 0;
[ActionSheetStringPicker showPickerWithTitle:@"Select Time Slot" rows:timeSlots initialSelection:i doneBlock:done cancelBlock:nil origin:textField];
}
break;
default:
break;
}
}
当触摸表格中的特定元素时,将调用此函数。第一个案例挂起并崩溃,第二个案例就像一个冠军 - 他们都来自github上的ActionSheetPicker
。我将动作设置为nil只是为了测试,但无论其值如何,它都会挂起。