4

尝试在 iPhone 上启动我的应用程序时发生了神秘的崩溃(尽管它在模拟器上完全有效)。我认为问题在于这两种方法..:

-(void)viewWillAppear:(BOOL)animated{
    [self getValueFromPicker];
}


-(void)getValueFromPicker{

    NSDate *now = [NSDate date];

    NSDate *birthDate = self.birthdayPicker.date;

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
                                               fromDate:now
                                                 toDate:birthDate
                                                options:0];

    NSLog(@"Difference in years %i/", components.year);

}

应用程序因SIGABRT错误而崩溃 ,并且我可以在控制台中看到一条文本:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date'

请帮助我,我真的不知道我做错了什么,当我在控制台的模拟器上做同样的事情时,我可以看到从现在日期和用户选择的日期到年份的差异。

更新:在我删除 [self defaultBirthdayPickerDate] 之后;在 viewDidLoad 部分它开始工作。但是,现在选择器显示当前日期,选择生日日期不是很方便,现在我仍然需要将其当前日期从现在更改为过去..

4

4 回答 4

8

大多数情况下,当您应用nil日期时会产生这种类型的错误:检查self.birthdayPicker.date它的值是nil或不是?并给出适当的条件if,您将获得nil价值UIDatePicker.

于 2013-03-05T09:07:35.970 回答
1

我认为问题在这里:

NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
                                               fromDate:now
                                                 toDate:birthDate
                                                options:0];

fromDate的高于toDate.

将其更改为:

NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
                                               fromDate:birthDate
                                                 toDate:now
                                                options:0];
于 2013-03-05T08:52:23.333 回答
1

你需要设置你的 NSDateFormatter 的语言环境。使用美国语言环境设置您的 iPhone 设置,然后将 12/24 设置设置为任何一个选项。
为此,您必须查看 iphone 设置面板。

希望这有效。

于 2013-03-05T09:50:48.150 回答
0

我还有一种方法可以为选择器设置默认值,如下所示:

-(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];
}

控制台中的完整崩溃报告是:

2013-03-05 13:15:12.982 DeathLine[2506:907] *** Assertion failure in -[_UIDatePickerView _setDate:animated:forced:], /SourceCache/UIKit/UIKit-2380.17/_UIDatePickerView.m:302
2013-03-05 13:15:12.985 DeathLine[2506: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 0x35a6b 0x358db 0x3432b595 0x3438014b 0x34380091 0x3437ff75 0x3437fe99 0x3437f5d9 0x3437f4c1 0x3436db93 0x2908c33 0x3436d833 0x343f70c5 0x343f7077 0x343f7055 0x343f690b 0x343f6e01 0x3431f5f1 0x3430c801 0x3430c11b 0x360225a3 0x360221d3 0x324d9173 0x324d9117 0x324d7f99 0x3244aebd 0x3244ad49 0x360212eb 0x34360301 0x2dc21 0x3a658b20)
libc++abi.dylib: terminate called throwing an exception
于 2013-03-05T09:19:08.517 回答