Проблемы с NSDate и NSDateFormatter - PullRequest
4 голосов
/ 21 февраля 2009

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

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMMM d, yyyy"];
NSDate *date = [dateFormatter dateFromString:cDate];
datePicker.date = date;
NSString *dateStr = [dateFormatter stringFromDate:date]; 
[dateLabel setText:dateStr];
[dateFormatter release];

Если я прокомментирую вышесказанное, приложение в порядке. Также, если я изменю формат даты на следующий, не произойдет сбоя:

[dateFormatter setDateFormat:@"yyyy-MM-dd"];

В моем UIDatePicker делегате я повторил код, который выглядит следующим образом (и прекрасно работает):

-(IBAction)datePickerValueChanged:(id)sender 
{
    NSDate *date = [datePicker date];       
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter setDateFormat:@"MMMM d, yyyy"];
    NSString *dateStr = [dateFormatter stringFromDate:date]; 
    [dateLabel setText:dateStr]; 
}

Я получаю следующую ошибку:

*** Assertion failure in -[UIDatePickerView _updateBitsForDate:andReload:animateIfNeeded:], /SourceCache/UIKit/UIKit-747.38/UIDatePicker.m:892

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date'

Ответы [ 2 ]

3 голосов
/ 21 февраля 2009

Проблема заключается в том, что введенная дата имеет формат «гггг-ММ-дд», но форматер даты, который вы используете с dateFromString, имеет формат «ММММ д, гггг». Вам нужно будет выполнить синтаксический анализ обоих форматов, если вы хотите, чтобы оба формата были приняты.

Например:

[dateFormatter setDateFormat:@"MMMM d, yyyy"];
NSDate *date = [dateFormatter dateFromString:cDate];
if (date == nil) {
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    date = [dateFormatter dateFromString:cDate];
    if (date == nil) {
        // Handle the situation where the date string could not be parsed
    }
}
0 голосов
/ 21 февраля 2009

Если ваш звонок

NSDate *date = [dateFormatter dateFromString:cDate];

не удается, дата равна NULL.

Это не написано в документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...