【问题标题】:Invalid parameter not satisfying: date无效参数不满足:日期
【发布时间】:2012-06-20 23:40:18
【问题描述】:

我遇到了来自 Crashlytics 的问题。我有调试参数,所以我看看有什么参数。

datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 40, 0, 0)];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSString *startTimeString = [MathFunctions minutesToTimeString:[appointment.start_time integerValue]];
    NSLog(@"Time: %@",startTimeString);
    NSLog(@"Date: %@", appointment.date);
    [dateFormatter setDateFormat:@"yyyyMMdd h:mm a"];
    [Crashlytics setObjectValue:[NSString stringWithFormat:@"%@ %@", appointment.date, startTimeString] forKey:@"ResAddDate"];
    NSString *dateTimeString = [NSString stringWithFormat:@"%@ %@", appointment.date, startTimeString];
    NSLog(@"Date String: %@", dateTimeString);
    datePicker.date = [dateFormatter dateFromString:dateTimeString];

来自 crashlytics 的崩溃日志显示日期格式正确

RESADDDATE: 20120621 12:00 AM

崩溃发生在datePicker.date = [dateFormatter dateFromString:dateTimeString];

如果日期格式存在且正确,为什么会崩溃?

Crashlytics 日志:

CoreFoundation  
__exceptionPreprocess + 162
1    libobjc.A.dylib    
objc_exception_throw + 32
2    CoreFoundation 
+[NSException raise:format:]
3    Foundation 
-[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 90
4    UIKit  
-[UIDatePickerView _updateBitsForDate:forced:andReload:animateIfNeeded:] + 146
5    UIKit  
-[UIDatePickerView _setDate:animated:forced:] + 348
6    UIKit  
-[UIDatePickerView setDate:animated:] + 30
7    UIKit  
-[UIDatePicker setDate:] + 36
8    MyApp   ReserveAddController.m line 283
-[ReserveAddController showDatePicker] + 283
9    MyApp   ReserveAddController.m line 179
-[ReserveAddController tableView:didSelectRowAtIndexPath:] + 179
10   UIKit  
-[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 944
11   UIKit  
-[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 158
12
Foundation  
__NSFireDelayedPerform + 414
13   CoreFoundation 
__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 14
14   CoreFoundation 
__CFRunLoopDoTimer + 364
15   CoreFoundation 
__CFRunLoopRun + 1206
16   CoreFoundation 
CFRunLoopRunSpecific + 300
17   CoreFoundation 
CFRunLoopRunInMode + 104
18   GraphicsServices   
GSEventRunModal + 136
19   UIKit  
UIApplicationMain + 1080
20   Appointment-Plus    main.m line 16
main + 16
21   Appointment-Plus

【问题讨论】:

  • 你能显示崩溃日志或跟踪吗?
  • @MichaelFrederick 我已经编辑了 OP
  • UIDatePicker 断言失败。这是一个相当不健壮的 API,所以这并不奇怪。打印出您传递给 UIDatePicker 的实际 NSDate 是明智的。还要考虑到问题可能出在您的 UIDatePicker 设置上——您可能以某种方式错误地初始化了线轴。
  • @HotLicks 一切似乎都设置正确。我无法重新创建此问题,但有时我会收到来自用户的崩溃报告。它似乎是随机的,您可以看到日期格式是正确的。
  • 我们不知道 NSDateFormatter 是否正确解析了日期。它可能返回 nil,例如。

标签: objective-c nsdate nsdateformatter


【解决方案1】:

请注意,您可能对语言环境“feechure”有所了解。您需要设置 NSDateFormatter 的语言环境。

设置具有美国语言环境的手机,然后将 12/24 设置为 24。还设置具有欧洲语言环境的手机,然后将 12/24 设置为 12。很可能其中一个或另一个或两者都会失败。

【讨论】:

  • 你是个野兽!我从来没有想到这一点。在与发生坠机事故的 cmets 中的一个人交谈时,我意识到他说他来自爱尔兰。我将手机设置为爱尔兰并复制了崩溃。看起来这就是罪魁祸首。将研究并返回。
  • (“Feechure”是“编程艺术”的合法术语。)
  • 查看上面的链接。具体见this answer。
猜你喜欢
  • 2012-02-14
  • 2021-07-20
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多