【发布时间】:2017-10-26 22:36:24
【问题描述】:
我有以下代码将 DatePicker 添加到我的 UIView 之一。
UIDatePicker *datePicker =
[[UIDatePicker alloc] initWithFrame:CGRectMake(0, 30, 320, 250)];
[datePicker setDatePickerMode:UIDatePickerModeDate];
datePicker.hidden = NO;
datePicker.date = [NSDate date];
[datePicker addTarget:self
action:@selector(changeDateInLabel:)
forControlEvents:UIControlEventValueChanged];
[self.dateView addSubview:datePicker];
这段代码已经存在了一段时间,但我们现在已经注意到一些随机崩溃。崩溃仅发生在 iOS 11 中。这就是崩溃的堆栈跟踪的样子
Fatal Exception: NSRangeException
*** -[__NSArrayM objectAtIndex:]: index 9223372036854775807 beyond bounds [0 .. 1]
Fatal Exception: NSRangeException
0 CoreFoundation 0x180d87d38 __exceptionPreprocess
1 libobjc.A.dylib 0x18029c528 objc_exception_throw
2 CoreFoundation 0x180d20c44 _CFArgv
3 CoreFoundation 0x180c50cc0 -[__NSArrayM removeObjectAtIndex:]
4 UIKit 0x18a3ecaa8 -[UIPickerView selectedRowInComponent:]
5 UIKit 0x18ac52224 -[_UIDatePickerMode_Date _dateForYearRow:]
6 UIKit 0x18ac4edd8 -[_UIDatePickerMode dateForRow:inCalendarUnit:]
7 UIKit 0x18ac4fa70 -[_UIDatePickerMode _updateSelectedDateComponentsWithNewValueInComponent:usingSelectionBarValue:]
8 UIKit 0x18ac4fd18 -[_UIDatePickerMode selectedDateComponents]
9 UIKit 0x18ac43370 -[_UIDatePickerView _updatedLastSelectedComponentsByValidatingSelectedDateWithLastManipulatedComponent:]
10 UIKit 0x18ac427e8 -[_UIDatePickerView _setDate:animated:forced:]
11 UIKit 0x18ac42d24 -[_UIDatePickerView _setMode:]
12 UIKit 0x18ac42e40 -[_UIDatePickerView setDatePickerMode:]
关于什么会导致这次崩溃的任何指针? 谢谢
【问题讨论】:
-
index 9223372036854775807 beyond bounds [0 .. 1]对我来说似乎很清楚。您如何尝试访问选择器的数据? -
老实说,如果崩溃发生在上面代码的第二行(堆栈跟踪表明,但可以使用调试器或通过在
-setDatePickerMode:行之后粘贴一个日志,并查看该日志是否在崩溃之前发生)。一个全新的日期选择器不应该仅仅因为您在其上设置了模式而崩溃。话虽如此,也许如果你重新排列你的行,以便在设置完其他所有内容后调用-setDatePickerMode:,它会解决它吗? -
@CharlesSrstka 我同意。在设置选择器模式之前,我会尝试设置选择器的
date属性,看看是否有帮助。 -
我会尝试将其简化为可能导致崩溃的最简单程序,并将项目附加到雷达报告中。
-
同意这是一个框架错误,基于符号名称我怀疑它正在尝试验证在 iOS 11 中不再适用的东西。如果你删除并重新安装应用程序,它是否仍然崩溃(即新鲜iOS 11 安装?)?。
标签: ios objective-c uidatepicker