转换的NSDate到的NSString导致无法识别的选择异常(Converting NSDate t

2019-08-22 20:48发布

我存储的NSDate一个plist中作为一个字符串,并推出我试图将字符串从plist中转换回NSDate以后进行比较。

这就是我如何保存在我的plist中值:

[InfoDic setValue:[NSDate date] forKey:@"LastDate"];

在日志(当我转换[NSDate date] ,以正确的字符串)就这样说:

2013-04-13 22:47:57 +0000

这是我正在尝试plist中值转换回NSDate

NSString *Checkdate= [InfoDic objectForKey:@"LastDate"];
NSDateFormatter *DateFormat=[[NSDateFormatter alloc]init];
[DateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
NSDate *theday=[DateFormat dateFromString:Checkdate];

这是在我的iPhone 4S的错误日志:

<Error>: -[__NSDate length]: unrecognized selector sent to instance 0x1d8715e0
<Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[__NSDate length]: unrecognized selector sent to instance 0x1d8715e0'
    *** First throw call stack:
(0x31e5c2a3 0x39b7997f 0x31e5fe07 0x31e5e531 0x31db5f68 0x327c213d 0x327c208d 0x327c237b 0x23fe1 0x33c83595 0x33cc3d79 0x33cbfaed 0x33d011e9 0x2385d 0x33cc4ad9 0x33cc4663 0x33cbc84b 0x33c64c39 0x33c646cd 0x33c6411b 0x3597a5a3 0x3597a1d3 0x31e31173 0x31e31117 0x31e2ff99
0x31da2ebd 0x31da2d49 0x33cbb485 0x33cb8301 0x235a1 0x23528)

请注意,当我在我的设备上安装应用程序需要在plist中的第一个日期,并将其存储。 当我关闭应用程序,并重新运行它,它给我的SIGABRT。

我应该怎么处理这件事?

Answer 1:

你是过于复杂的事情。 是什么让你认为存储NSDate对象,你会得到一个NSString

做就是了

NSDate * checkDate = [InfoDic objectForKey:@"LastDate"];

另外,不要混淆KVC方法与NSDictionary方法。

你想用setObject:forKey:不是setValue:forKey如果你不想去面对恶劣的惊喜。



Answer 2:

你是不是存储日期在plist中的字符串,你是把它作为一个日期。

该行:

[InfoDic setValue:[NSDate date] forKey:@"LastDate"];

存储实际NSDate对象。

所有你需要把它背出来是调用:

NSDate *theDay = InfoDic[@"LastDate"];

顺便说一句 - 行:

[InfoDic setValue:[NSDate date] forKey:@"LastDate"];

应该:

[InfoDic setObject:[NSDate date] forKey:@"LastDate"];

要不就:

InfoDic[@"LastDate"] = [NSDate date];


文章来源: Converting NSDate to NSString causes unrecognized selector exception