将字符串转换为NSDate问题:[__NSDate Length]无法识别已选中

时间:2012-03-09 16:15:16

标签: iphone objective-c ios nsdateformatter

indexNumber.row2012-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 个答案:

答案 0 :(得分: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 :(得分:0)

要么 sch 建议,要么根本不需要时间,你可以截断你提供给dateFormatter的字符串。例如。像这样:

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

其中 9 是一个索引,您希望获取一大块字符串。