从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]; 
} 
+2

请修复缩进。 –

+1

您不需要将'NSDate'转换为/来自字符串,'NSUserDefaults'完全可以存储'NSDate'对象,并且您只需通过自己进行转换就可以使事情变得复杂和缓慢。查看http://stackoverflow.com/questions/2013850/whats-the-optimum-way-of-storing-an-nsdate-in-nsuserdefaults –

+0

我的日期最初是以字符串的形式出现的,这就是为什么我必须把它变成一个NSDate通过dateFromString: –

你确定你得到一个有效的对象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跟踪以前的日期。