Преобразование строки в проблему 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 - индекс, до которого вы хотите взять фрагмент строки.