无法正确设置datePicker的默认日期,在iOS设备上崩溃

问题描述:

我已经在几个小时前创建了一篇文章,但这是不正确的,我误解了导致崩溃的事情。所以我转发了它,我希望你不会为此责怪我。无法正确设置datePicker的默认日期,在iOS设备上崩溃

我得到一个拥有一个datePicker的观点,我的观点是在选择器上显示NOT当前日期,但显示“旧”日期(我选择1987年)。但我不知道什么出了问题,当我在模拟器上启动应用程序时,它工作得很好,但是当我在加载视图之前切换到iPhone应用程序崩溃时。还有就是代码:

-(void)defaultBirthdayPickerDate{ 

    NSString *dateString = @"09-Oct-1987"; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
    dateFormatter.dateFormat = @"dd-MMM-yyyy"; 
    NSDate *date = [dateFormatter dateFromString:dateString]; 
    [self.birthdayPicker setDate:date]; 

} 

然后:

- (void)viewDidLoad 
{ 

    [self defaultBirthdayPickerDate]; 
    [super viewDidLoad]; 
} 

有东西,什么地方的东西导致崩溃:

2013-03-05 15:50:31.070 DeathLine[2985:907] *** Assertion failure in -[_UIDatePickerView _setDate:animated:forced:], /SourceCache/UIKit/UIKit-2380.17/_UIDatePickerView.m:302 
2013-03-05 15:50:31.073 DeathLine[2985:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date' 
*** First throw call stack: 
(0x325042a3 0x3a22197f 0x3250415d 0x32dd9ab7 0x344bdf15 0x344c6429 0x3458f989 0x14a6b 0x148db 0x3432b595 0x3438014b 0x34380091 0x3437ff75 0x3437fe99 0x3437f5d9 0x3437f4c1 0x3436db93 0x28f4c33 0x3436d833 0x343f70c5 0x343f7077 0x343f7055 0x343f690b 0x343f6e01 0x3431f5f1 0x3430c801 0x3430c11b 0x360225a3 0x360221d3 0x324d9173 0x324d9117 0x324d7f99 0x3244aebd 0x3244ad49 0x360212eb 0x34360301 0xcc21 0x3a658b20) 
libc++abi.dylib: terminate called throwing an exception 

不知[self.birthdayPicker.date]不为空,我知道,但我不知道如何解决问题。

+1

日期看起来像什么时候你nslog它? NSLog(@“date:%@”,date);和/或调试器如何呈现它? – 2013-03-05 11:58:32

+0

Yeah..2013-03-05 16:01:23.727 DeathLine [3003:907] date:(null)。谢谢Hermann – 2013-03-05 12:02:48

我的猜测是,这是由您的设备上设置diffent区域(NSLocale),并在模拟器引起。请注意,09-Oct-1987日期只能在格式化程序区域设置为英语时由您的格式程序解析(因为Oct代表October英文)。否则它将返回nil并将nil设置为UIDatePicker将导致您看到的错误。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en"]; 
+0

是的,它的工作..非常感谢你,苏丹! :) – 2013-03-05 12:20:29

date可能是nil。您应该检查格式化程序是否按预期工作。

+0

是的.. 2013-03-05 16:01:23.727 DeathLine [3003:907] date:(null)。但是如何以及为什么它在模拟器上的作品呢?当我在模拟器上启动它时,它是2013-03-05 16:02:57.920 DeathLine [6155:11303] date:1987-10-08 21:00:00 +0000 – 2013-03-05 12:02:27

试试这个

-(void)defaultBirthdayPickerDate{ 
    [self.birthdayPicker setDatePickerMode:UIDatePickerModeDate]; 
    NSString *dateString = @"09-Oct-1987"; 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"dd-MMM-yyyy"]; 
    if([dateFormat dateFromString: dateString]) 
    { 
     NSDate *date = [dateFormat dateFromString: dateString]; 
     [self.birthdayPicker setDate:date]; 
    } 
    [dateFormat release]; 
} 

- (void)viewDidLoad{ 
    [super viewDidLoad]; //super method should be first in you code 
    [self defaultBirthdayPickerDate]; 
} 

尝试设置DatePickerMode到UIDatePickerModeDate这可能会帮助您解决问题

+0

谢谢阿克巴里,但我已经解决了这个 – 2013-03-05 12:21:02