从NSUserDefaults检索NSDate总是返回零
问题描述:
我有一个NSDate,我将其保存到NSUserDefaults中。从NSUserDefaults检索NSDate总是返回零
当我的应用程序为第二遍运行此代码时,我期待从NSUserDefaults中检索NSDate,但始终为零。不知道为什么。
NSDate *mostRecentMentionDate = [dateFormatter dateFromString:mostRecentMentionMessageTimestamp];
NSDate *savedMentionDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"mostRecentMentionDate"];
if (savedMentionDate == nil || [savedMentionDate isEqual:[NSNull null]]) {
//There is no existing mention, so save the most recent one
[[NSUserDefaults standardUserDefaults]setObject:mostRecentMentionDate forKey:@"mostRecentMentionDate"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
答
你确定你得到一个有效的对象mostRecentMentionDate
?在从NSUserDefaults获取之前,将它放入NSLog中,您可能会遇到日期格式问题。
答
,如果我使用此代码它工作得很好,我认为问题与您dateformater
NSDate *mostRecentMentionDate = [NSDate date];
NSDate *savedMentionDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"mostRecentMentionDate"];
if (savedMentionDate == nil || [savedMentionDate isEqual:[NSNull null]]) {
//There is no existing mention, so save the most recent one
[[NSUserDefaults standardUserDefaults]setObject:mostRecentMentionDate forKey:@"mostRecentMentionDate"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
答
NSDate确认为NSCoding协议。上面的代码应该工作。
试试这个 -
/
/ Create and store it
NSDate * date = [NSDate date];
NSData * dateData = [NSKeyedArchiver archivedDataWithRootObject:date];
[dateData writeToFile:@"/Some/path/to/file.dat" atomically:NO];
// Now bring it back
NSData * restoredDateData = [NSData dataWithContentsOfFile:@"/Some/path/to/file.dat"];
NSDate * restoredDate = [NSKeyedUnarchiver unarchiveObjectWithData:restoredDateData];
或者你可以得到timeIntervalSinceReferenceDate值作为NSNumber的(双),并将其保存到NSUserDefault
跟踪以前的日期。
请修复缩进。 –
您不需要将'NSDate'转换为/来自字符串,'NSUserDefaults'完全可以存储'NSDate'对象,并且您只需通过自己进行转换就可以使事情变得复杂和缓慢。查看http://stackoverflow.com/questions/2013850/whats-the-optimum-way-of-storing-an-nsdate-in-nsuserdefaults –
我的日期最初是以字符串的形式出现的,这就是为什么我必须把它变成一个NSDate通过dateFromString: –