преобразование строки в проблему NSDate: [__NSDate Length] неопознанный выбран - PullRequest
11 голосов
/ 09 марта 2012

indexNumber.row такая дата, как 2012-03-09 23:00:00 +0000.Я пробовал несколько разных способов получить мою дату в NSDate, но я продолжаю получать ошибку заголовка.

NSString *inputString = [self.measurements objectAtIndex:indexNumber.row];

// Convert string to date object
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date = [dateFormatter dateFromString:inputString ];
NSLog(@"date format is: %@", date);

Любые идеи, почему я получаю следующую ошибку:

Завершение работы приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '- [__ NSDate length]: нераспознанный селектор, отправленный экземпляру 0x6ca0c60'

Ответы [ 2 ]

28 голосов
/ 09 марта 2012

Вы получаете эту ошибку, потому что вы передаете объект NSDate в dateFromString:.

Добавьте NSLog, и вы увидите, что:

NSString *inputString = [self.measurements objectAtIndex:indexNumber.row];
if ([inputString isKindOfClass:[NSDate class]]) {
    NSLog(@"inputString is of type NSDate");
}

Также здеськак воспроизвести вашу ошибку:

NSString *inputString = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSDate *date = [dateFormatter dateFromString:inputString];

Это означает, что массив self.measurements содержит NSDate объектов, а не NSString объектов.


Когда вы исправляете свой текущийпроблема, вы, вероятно, столкнетесь с новым, потому что вы не используете правильный формат даты.Для разбора строк даты типа: 2012-03-09 23:00:00 +0000 вы должны использовать следующий формат даты:

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zz"];
0 голосов
/ 09 марта 2012

Либо делайте так, как подсказывает sch , либо, если вам совсем не нужно время, вы можете просто обрезать строку, которую вы передаете в свой DateFormatter. Например. вот так:

NSDate *date = [dateFormatter dateFromString:[inputString substringToIndex:9]];

Где 9 - индекс, до которого вы хотите взять кусок строки.

...