科尔多瓦datepicker插件不工作在iOS8:UITableView数据源未设置
问题描述:
更新到iOS8后,科尔多瓦datepicker插件无法工作。它具有以下消息崩溃:科尔多瓦datepicker插件不工作在iOS8:UITableView数据源未设置
终止应用程序由于未捕获的异常“NSInternalInconsistencyException”,理由是:“数据源的UITableView没有设置”
,但我没有看到在插件的源代码任何的UITableView相关的代码。我不知道,也许UIDatePicker中有内部的UITableView?
这里是代码(我删除,为方便阅读一些非相对码):
- (UIPopoverController *)createPopover:(NSMutableDictionary *)options {
UIView *datePickerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, pickerViewWidth, pickerViewHeight)];
if(!self.datePicker){
self.datePicker = [self createDatePicker:options frame:frame];
[self.datePicker addTarget:self action:@selector(dateChangedAction:) forControlEvents:UIControlEventValueChanged];
}
NSDateFormatter *formatter = [self createISODateFormatter:@"yyyy-MM-dd'T'HH:mm:ss'Z'" timezone:[NSTimeZone defaultTimeZone]];
NSString *dateString = [options objectForKey:@"date"];
self.datePicker.date = [formatter dateFromString:dateString];// if remove this line, it works fine
[datePickerView addSubview:self.datePicker];
UIViewController *datePickerViewController = [[UIViewController alloc]init];
datePickerViewController.view = datePickerView;
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:datePickerViewController];
popover.delegate = self;
[popover setPopoverContentSize:CGSizeMake(pickerViewWidth, pickerViewHeight) animated:NO];
[popover presentPopoverFromRect:anchor inView:self.webView.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
return popover;
}
这一行:
self.datePicker.date = [formatter dateFromString:dateString];
最终导致死机,并与调试,我发现dateString的值是:
2014-10-17T10:0:00Z
2014-10-17T20:0:00Z
,并从第二显示器崩盘,第一次总是好的
请你给我一些线索?感谢
答
终于被我发现了问题:
科尔多瓦的DatePicker的源代码,重用的UIDatePicker实例:
if(!self.datePicker){
self.datePicker = [self createDatePicker];
[self.datePicker addTarget];
}
,并且它在iOS7工作正常,但导致在iOS8上的崩溃。
在iOS8上,不要在多UIView的共享的UIDatePicker实例,所以我修改代码:
// in iOS8, UIDatePicker couldn't be shared in multi UIViews, it will cause crash. so create new UIDatePicker instance every time
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
self.datePicker = [self createDatePicker:options frame:frame];
[self.datePicker addTarget:self action:@selector(dateChangedAction:) forControlEvents:UIControlEventValueChanged];
}else{
if(!self.datePicker){
self.datePicker = [self createDatePicker:options frame:frame];
[self.datePicker addTarget:self action:@selector(dateChangedAction:) forControlEvents:UIControlEventValueChanged];
}
}
希望这能帮助像我
这是你所使用的插件? https://github.com/VitaliiBlagodir/cordova-plugin-datepicker – 2014-11-02 00:09:09
。有几个关于这个问题的问题 – michael 2014-11-02 10:32:57
你的代码没有解决该插件的最新版本的问题,你使用了哪个版本? – 2014-11-03 21:28:31