我将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。
我该怎么办?
答案 0 :(得分:3)
您没有将日期作为字符串存储在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];
答案 1 :(得分:2)
你太复杂了。是什么让您认为存储NSDate
对象,您将获得NSString
?
只做
NSDate * checkDate = [InfoDic objectForKey:@"LastDate"];
另外,请勿将KVC
方法与NSDictionary
方法混淆。
如果您不想面对重大意外,则希望使用setObject:forKey:
代替setValue:forKey
。