解析日期字符串会给[__NSDate length]无法识别的选择器异常

时间:2015-05-25 16:55:19

标签: objective-c cocoa cocoa-touch nsdate nsdateformatter

我有NSDictionary这样的日期:

  

" 2015-05-23 21:04:11 + 0000"

enter image description here

我尝试解析它:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];

NSDate *date = [dateFormat dateFromString:[item valueForKey:@"enddata"]];

我也尝试将最后一行更改为:

NSDate *date = [dateFormat dateFromString:[[item valueForKey:@"enddata"] stringValue]];

但我的错误总是一样的:

  

[__ NSDate length]:无法识别的选择器发送到实例0x78ec0170

我看过thisthisthismany more等帖子。我尝试过不同的格式,例如:

  1. @" yyyy-MM-dd HH:mm:ss z"
  2. @" yyyy-MM-dd HH:mm:ss zzzz"
  3. @" yyyy-MM-dd HH:mm:ss Z"
  4. @" yyyy-MM-dd HH:mm:ss + zzzz"
  5. @" yyyy-MM-dd HH:mm:ss z"
  6. @" YYYY-MM-DD' T' HH:MM:SS' Z'"
  7. @" yyyy-MM-dd hh:mm:ss a"
  8. @" yyyy-MM-dd HH:mm:ss a"
  9. @" yyyy-MM-dd HH:mm:ss zzz"
  10. @" yyyy-MM-dd hh:mm:ss zzzz"
  11. 但仍然获得相同的SIGABRT

    有没有人知道什么是错的?

2 个答案:

答案 0 :(得分:2)

我猜测item[@"enddata"]已经是NSDate对象,而不是NSString对象。

验证:

NSLog(@"enddata is type %@", NSStringFromClass([item[@"enddata"] class]));

也不要使用valueForKey:,而是使用objectForKey:或我上面使用的新访问语法。

答案 1 :(得分:0)

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss z"];

NSDate *date = [dateFormat dateFromString:@"2015-05-23 21:04:11 +0000"];

NSLog(@"date: %@", [dateFormat stringFromDate:date]);

对我来说很好。

NSLog是你的朋友。也许您应该NSLog item的值,或

的值
[item valueForKey:@"enddata"]

甚至

[[item valueForKey:@"enddata"] stringValue]

因为如果后者是所需格式的NSString,那么使用它调用dateFromString应该可以正常工作。