2014-10-17 60 views
1

更新到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

,並從第二顯示器崩盤,第一次總是好的

請你給我一些線索?感謝

回答

5

終於被我發現了問題:

科爾多瓦的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]; 
    } 
} 

希望這能幫助像我

+0

這是你所使用的插件? https://github.com/VitaliiBlagodir/cordova-plugin-datepicker – 2014-11-02 00:09:09

+0

。有幾個關於這個問題的問題 – michael 2014-11-02 10:32:57

+0

你的代碼沒有解決該插件的最新版本的問題,你使用了哪個版本? – 2014-11-03 21:28:31