2017-10-26 17 views
2

私は、私のUIViewのいずれかにDatePickerを追加する次のコードを持っています。UIDatePicker NSRangeExceptionクラッシュiOS 11

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

このコードはしばらくありましたが、現在ではランダムクラッシュが発生しています。クラッシュはこれがクラッシュのスタックトレースが

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

このクラッシュを引き起こしているだろうか上の任意のポインタのように見えるものであるiOSの11で起こりますか? ありがとうございます

+0

「限界を超えたインデックス9223372036854775807」は私には明らかです。ピッカーのデータにどのようにアクセスしようとしますか? – LinusGeffarth

+0

'changeDateInLabel:'の実装は何ですか? Linusが言ったように、エラーはかなり自明です。 –

+1

正直なところ、これは、上記のコードの2行目でクラッシュが発生している(スタックトレースが示唆しているが、デバッガを使用して確認できるか、 ' - setDatePickerMode: '行とそのログがクラッシュ前に発生しているかどうかを確認する)。あなたがそれにモードを設定しただけで、まったく新しい日付ピッカーがクラッシュしてはいけません。それで、多分あなたが '-setDatePickerMode:'を呼び出すように行の順序を並べ替えるならば、それ以外のものをすべて設定した後、それを回避できますか? –

答えて

0

このコードに従ってください。助けてください。

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]; 
} 
関連する問題