2013-03-05 2 views
3

У меня есть таинственный сбой при попытке запустить приложение на iPhone (он отлично работает на Simulator, хотя). Я думаю, что проблема в этом 2 способами ..:Crash with DatePicker и NSDate

-(void)viewWillAppear:(BOOL)animated{ 
    [self getValueFromPicker]; 
} 


-(void)getValueFromPicker{ 

    NSDate *now = [NSDate date]; 

    NSDate *birthDate = self.birthdayPicker.date; 

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 
               fromDate:now 
               toDate:birthDate 
               options:0]; 

    NSLog(@"Difference in years %i/", components.year); 

} 

App аварии с SIGABRT ошибка, и есть текст, который я могу видеть в консоли: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date'

Пожалуйста, помогите мне, i'am действительно не знаю, что я сделал неправильно, когда я сделал то же самое на Simulator в консоли, я вижу разницу в годах от Now date and date, пользователь выбрал.

Обновление: после того как я удален [self defaultBirthdayPickerDate]; в разделе viewDidLoad он начинает работать. Но теперь сборщик показывают текущую дату, это не очень удобно для выбора даты рождения, теперь я по-прежнему необходимо изменить текущую дату теперь в прошлое ..

+1

Подключена ли выходная точка выходного сигнала? –

+0

Да .. @property (сильный, неатомный) IBOutlet UIDatePicker * birthdayPicker; Как я уже сказал, это работает на симуляторе и аварии на устройстве. Какая черная магия? –

+0

запишите оба значения и проверьте вывод –

ответ

6

В основном это виды ошибок генерируются, когда вы применяете nil дату: проверьте значения self.birthdayPicker.date это nil/или нет ?? и дать надлежащее состояние if вы получаете nil значение UIDatePicker.

+0

сначала проверьте self.birthdayPicker.date ??? – iPatel

+0

Это сбой, потому что он всегда не == NULL. Когда я писал [я.birthdayPicker setDate: date]; он сбой, не знаю, почему –

+0

if (date == NULL) {code;} else {code;} – iPatel

1

Я думаю, что вопрос здесь:

NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 
               fromDate:now 
               toDate:birthDate 
               options:0]; 

Ваш fromDate выше, чем toDate.

Изменить это:

NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 
               fromDate:birthDate 
               toDate:now 
               options:0]; 
+0

Это не помогло мне решить эту проблему, но все же я меняю код, как и предложить, и теперь мне не нужно беспокоиться, как бороться с отрицательными номерами, спасибо :) –

0

У меня также есть метод для установки значений по умолчанию для сборщика, как это:

-(void)defaultBirthdayPickerDate{ 

    NSString *dateString = @"09-Oct-1987"; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
    dateFormatter.dateFormat = @"dd-MMM-yyyy"; 
    NSDate *date = [dateFormatter dateFromString:dateString]; 
    [self.birthdayPicker setDate:date]; 
} 

-(void)viewDidLoad{ 
    [self defaultBirthdayPickerDate]; 
} 

Полный отчет о сбое в консоли:

2013-03-05 13:15:12.982 DeathLine[2506:907] *** Assertion failure in -[_UIDatePickerView _setDate:animated:forced:], /SourceCache/UIKit/UIKit-2380.17/_UIDatePickerView.m:302 
2013-03-05 13:15:12.985 DeathLine[2506:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date' 
*** First throw call stack: 
(0x325042a3 0x3a22197f 0x3250415d 0x32dd9ab7 0x344bdf15 0x344c6429 0x3458f989 0x35a6b 0x358db 0x3432b595 0x3438014b 0x34380091 0x3437ff75 0x3437fe99 0x3437f5d9 0x3437f4c1 0x3436db93 0x2908c33 0x3436d833 0x343f70c5 0x343f7077 0x343f7055 0x343f690b 0x343f6e01 0x3431f5f1 0x3430c801 0x3430c11b 0x360225a3 0x360221d3 0x324d9173 0x324d9117 0x324d7f99 0x3244aebd 0x3244ad49 0x360212eb 0x34360301 0x2dc21 0x3a658b20) 
libc++abi.dylib: terminate called throwing an exception 
+0

в сборщике даты дата должна быть в формате ниже: MMM d, y –

0

Вам необходимо установить языковой стандарт вашего NSDateFormatter. Настройте свои настройки iPhone с помощью US locale, а затем установите для параметра 12/24 любой вариант.
Для этого вам нужно заглянуть в панель настроек iphone.

Надеюсь, что это сработает.

+0

Интересно, как я мог это сделать –

+0

Посетите панель настроек «iphone» и найдите опцию «дата и время» – AppleDelegate