Преобразование строки в проблему NSDate: [__NSDate Length] непризнанная выбранная

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'

Ответ 1

Вы получаете эту ошибку, потому что передаете объект 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"];

Ответ 2

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

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

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