Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IOS:Fatal Exception: NSRangeException

The app work fine before iOS 11 update. After iOS 11 rollout, some user get this below crash but I cannot reproduce this in simulator iOS 11. Based on fabric.io, not all iOS 11 experiencing this, so far I only received from 22 crash report from 4 users. Need some help here, thanks.

Fatal Exception: NSRangeException
*** -[__NSArrayM objectAtIndex:]: index 9223372036854775807 beyond bounds [0 .. 1]

Fatal Exception: NSRangeException
0  CoreFoundation                 0x185b7fd38 __exceptionPreprocess
1  libobjc.A.dylib                0x185094528 objc_exception_throw
2  CoreFoundation                 0x185b18c44 _CFArgv
3  CoreFoundation                 0x185a48cc0 -[__NSArrayM removeObjectAtIndex:]
4  UIKit                          0x18f1e4aa8 -[UIPickerView selectedRowInComponent:]
5  UIKit                          0x18fa4a224 -[_UIDatePickerMode_Date _dateForYearRow:]
6  UIKit                          0x18fa46dd8 -[_UIDatePickerMode dateForRow:inCalendarUnit:]
7  UIKit                          0x18fa47a70 -[_UIDatePickerMode _updateSelectedDateComponentsWithNewValueInComponent:usingSelectionBarValue:]
8  UIKit                          0x18fa47d18 -[_UIDatePickerMode selectedDateComponents]
9  UIKit                          0x18fa3b370 -[_UIDatePickerView _updatedLastSelectedComponentsByValidatingSelectedDateWithLastManipulatedComponent:]
10 UIKit                          0x18fa3a7e8 -[_UIDatePickerView _setDate:animated:forced:]
11 UIKit                          0x18fa3ad24 -[_UIDatePickerView _setMode:]
12 UIKit                          0x18fa3ae40 -[_UIDatePickerView setDatePickerMode:]
13 UIKit                          0x18f4f51d8 -[UIDatePicker initWithCoder:]
14 UIKit                          0x18f6bf588 UINibDecoderDecodeObjectForValue
15 UIKit                          0x18f6bf2c0 -[UINibDecoder decodeObjectForKey:]
16 UIKit                          0x18f51652c -[UIRuntimeConnection initWithCoder:]
17 UIKit                          0x18f516d00 -[UIRuntimeEventConnection initWithCoder:]
18 UIKit                          0x18f6bf588 UINibDecoderDecodeObjectForValue
19 UIKit                          0x18f6bf700 UINibDecoderDecodeObjectForValue
20 UIKit                          0x18f6bf2c0 -[UINibDecoder decodeObjectForKey:]
21 UIKit                          0x18f5158a0 -[UINib instantiateWithOwner:options:]
22 UIKit                          0x18f51d64c -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:]
23 xxxxxxxxxxxxxxxxxxxxxxxxxx     0x1030445f0 -[VerifyAccountViewController viewDidLoad] (VerifyAccountViewController.m:47)
24 UIKit                          0x18ef8fbfc -[UIViewController loadViewIfRequired]
25 UIKit                          0x18efa8318 -[UIViewController __viewWillAppear:]
26 UIKit                          0x18f114ee0 -[UINavigationController _startCustomTransition:]
27 UIKit                          0x18f036e04 -[UINavigationController _startDeferredTransitionIfNeeded:]
28 UIKit                          0x18f036a34 -[UINavigationController __viewWillLayoutSubviews]
29 UIKit                          0x18f03695c -[UILayoutContainerView layoutSubviews]
30 UIKit                          0x18ef8d000 -[UIView(CALayerDelegate) layoutSublayersOfLayer:]
31 QuartzCore                     0x189b5d0b4 -[CALayer layoutSublayers]
32 QuartzCore                     0x189b61194 CA::Layer::layout_if_needed(CA::Transaction*)
33 QuartzCore                     0x189acff24 CA::Context::commit_transaction(CA::Transaction*)
34 QuartzCore                     0x189af6340 CA::Transaction::commit()
35 UIKit                          0x18f1f3744 _UIApplicationFlushRunLoopCATransactionIfTooLate
36 UIKit                          0x18f8d2718 __handleEventQueueInternal
37 UIKit                          0x18f8cb574 __handleHIDEventFetcherDrain
38 CoreFoundation                 0x185b28358 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
39 CoreFoundation                 0x185b282d8 __CFRunLoopDoSource0
40 CoreFoundation                 0x185b27b60 __CFRunLoopDoSources0
41 CoreFoundation                 0x185b25738 __CFRunLoopRun
42 CoreFoundation                 0x185a462d8 CFRunLoopRunSpecific
43 GraphicsServices               0x1878d7f84 GSEventRunModal
44 UIKit                          0x18eff3880 UIApplicationMain
45 xxxxxxxxxxxxxxxxxxxxxxxxxx     0x103090ee4 main (main.m:13)
46 libdyld.dylib                  0x18556a56c start

this part of the program code

- (void)viewDidLoad {

    [super viewDidLoad];

    storyboard = [UIStoryboard storyboardWithName:@"FirstTimeSetup" bundle:nil];
    dateformatter = [[NSDateFormatter alloc] init];
    [dateformatter setTimeZone:[NSTimeZone systemTimeZone]];

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DatePickerView" owner:self options:nil]; //here is  (VerifyAccountViewController.m:47)
    self.inputDatePicker = [[DatePickerView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 260)];
    self.inputDatePicker = [nib objectAtIndex:0];
    self.inputDatePicker.datePicker.datePickerMode =UIDatePickerModeDate;
    self.inputDatePicker.delegate = self;

    UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"Skip" style:UIBarButtonItemStylePlain target:self action:@selector(skipAction:)];
    self.navigationItem.rightBarButtonItem = item;
}
like image 496
Newbie009 Avatar asked Oct 06 '17 07:10

Newbie009


1 Answers

We saw the same issue in our app and were able to fix by setting the date picker's calendar type to 'Gregorian' BEFORE setting any other date picker property, e.g.

self.inputDatePicker = [[DatePickerView alloc] init...];
self.inputDatePicker.calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]
self.inputDatePicker.datePicker.datePickerMode = UIDatePickerModeDate;
self.inputDatePicker.delegate = self;

We reproduced on an iOS11 iPhone 6S by changing the user's calendar to Buddhist.

For some reason the app would crash if we set the calendar AFTER setting the date picker mode... seems like an Apple bug to force devs to have to think about the order in which we set our properties.

like image 86
Allen P Avatar answered Sep 21 '22 07:09

Allen P