2017-10-26 7 views
2

Ich habe den folgenden Code, um einen DatePicker zu einem meiner UIViews hinzuzufügen.UIDatePicker NSRangeException Absturz iOS 11

Dieser Code existiert schon eine Weile, aber wir haben jetzt einige zufällige Abstürze bemerkt. Die Abstürze passieren nur in iOS 11. Dies ist, was die Stack-Trace des Absturzes wie

sieht
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:] 

Alle Hinweise auf das, was diesen Absturz würde verursachen? Vielen Dank

+0

'Index 9223372036854775807 über Grenzen [0 .. 1]' scheint mir ziemlich klar. Wie versuchen Sie, auf die Daten des Pickers zuzugreifen? – LinusGeffarth

+0

Was ist die Implementierung von 'changeDateInLabel:'? Genau wie Linus sagte, ist der Fehler ziemlich selbsterklärend. –

+1

Ehrlich gesagt, sieht das für mich wie ein Framework-Fehler aus, wenn der Absturz in der zweiten Zeile des obigen Codes auftritt (was der Stack-Trace suggeriert, der aber entweder mit dem Debugger oder durch ein Log nach dem '' setDatePickerMode: 'line und sehen, ob dieses Protokoll vor dem Absturz auftritt. Eine brandneue Datumsauswahl sollte nicht abstürzen, nur weil Sie den Modus darauf eingestellt haben. Wenn Sie Ihre Zeilen neu anordnen, so dass Sie "-setDatePickerMode:" aufrufen, nachdem Sie alles andere eingerichtet haben, wird es das Problem umgehen. –

Antwort

0

Folgen Sie diesem Code.Es hilft Ihnen.

UIDatePicker *datePicker=[[UIDatePicker alloc]init]; 
    datePicker.datePickerMode=UIDatePickerModeDate; 
    [self.dateSelectionTextField setInputView:datePicker]; 
    UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 44)]; 
    [toolBar setTintColor:[UIColor grayColor]]; 
    UIBarButtonItem *doneBtn=[[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(ShowSelectedDate)]; 
    UIBarButtonItem *space=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
    [toolBar setItems:[NSArray arrayWithObjects:space,doneBtn, nil]]; 
    [self.dateSelectionTextField setInputAccessoryView:toolBar];. 

-(void)ShowSelectedDate 
{ NSDateFormatter *formatter=[[NSDateFormatter alloc]init]; 
    [formatter setDateFormat:@"dd/MMM/YYYY hh:min a"]; 
    self.dateSelectionTextField.text=[NSString stringWithFormat:@"%@",[formatter stringFromDate:datePicker.date]]; 
    [self.dateSelectionTextField resignFirstResponder]; 
}