2012-03-09 52 views
11

indexNumber.row是一个日期,如2012-03-09 23:00:00 +0000。我已经尝试了几种不同的方法,让我的日期进入NSDate,但我一直得到标题错误。将字符串转换为NSDate问题:[__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); 

任何想法,为什么我收到以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDate length]: unrecognized selector sent to instance 0x6ca0c60'

+0

你会得到什么样的错误,你能更具体一点吗? – Emil 2012-03-09 16:18:59

回答

28

你,因为你正在传递一个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"]; 
+1

我试过几个不同的setDateformats。我得到了与上述格式相同的错误:“终止应用程序由于未捕获异常'NSInvalidArgumentException',原因:' - [__ NSDate长度]:无法识别的选择发送到实例0x6ca0c60'” – BamBamBeano 2012-03-09 16:25:50

+0

设置字符串并获得“日期后添加NSLog格式是:2012-03-09 09:36:53 +0000“ – BamBamBeano 2012-03-09 16:28:46

+0

钉了它。运行你的if后,它实际上是一个NSDate,不需要转换。谢谢sch。 – BamBamBeano 2012-03-09 18:31:32

0

要么是作为SCH建议,或者如果你不需要多长时间,你可以截断字符串你提供给你的dateFormatter。例如。像这样:

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

凡是一个索引,最多要采取串的一大块。

+0

这不会解决他的问题。如果问题是日期格式化,他会得到一个“无”日期,而不是他提到的错误。 – sch 2012-03-09 16:37:38

+0

如果问题出在日期格式和给定字符串格式之间的区别 - 它**将解决问题。如果字符串是* nil *,那么当然它不会给你任何东西,以及你的建议。 – makaron 2012-03-09 16:49:29