NSUserDefaults正确存储NSDate,然后在第二次逆转后返回null

时间:2012-07-19 21:44:52

标签: objective-c ios nsdate nsuserdefaults

我正在尝试使用NSUserDefaults存储和检索startTimeendTime NSDate。 存储它们似乎不是问题:

self.convertedStringToDate = convertDate
NSLog(@"This should read 16:00: %@", self.convertedStringToDate);

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

[userDefaults setObject:convertDate forKey:@"startDate"];
[userDefaults synchronize];

然后我检索它只是为了确保它正确存储和检索:

NSDate* temporaryDate = (NSDate*)[userDefaults objectForKey:@"startDate"];
NSLog(@"Now User Defaults, should read 16:00: %@", temporaryDate);

看着我的NSLog,一切都很好:

2012-07-19 14:38:26.002 app[1973:707] This should read 16:00: 2012-07-19 16:00:00 +0000
2012-07-19 14:38:26.022 app[1973:707] Now User Defaults, should read 16:00: 2012-07-19 16:00:00 +0000

现在的问题是,当我再次检索日期时,在另一种方法中,日期出现null:

 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 NSDate *tmpDate = (NSDate*)[userDefaults objectForKey:@"startTime"];
 NSLog(@"Retreiving date, should be 16:00: %@",tmpDate);

如此日志所示:

2012-07-19 14:38:26.107 app[1973:707] Retreiving date, should be 16:00: (null)

有没有人有任何想法?我也尝试不检查检查中的日期,但日期继续返回null(这也没有意义,NSUSerDefaults是存储这些密钥和对象的数据库)。我也试过存储对象的retained属性,但仍无济于事。我错过了什么?

编辑:为愚蠢的错误阅读您自己的代码非常重要。

3 个答案:

答案 0 :(得分:5)

守则是正确的但是......

tmpDate = [userDefaults objectForKey:@“ startTime ”];

应该是

tmpDate = [userDefaults objectForKey:@“ startDate ”];

答案 1 :(得分:4)

这就是为什么你应该总是定义字符串常量。

答案 2 :(得分:0)

在NSString上创建一个类别,代码是:     的NSString + date.h     @interface(NSString) 制作类方法     +(的NSString)今日;      @结束      的NSString + date.m      @implimentation(NSString)       +(的NSString)今日        {       NSDateFormatter * formatter = [[NSDateFormatter alloc] init];        [formatter setTimeStyle:NSDateFormatShortStyle];        [formatter setDateStyle:NSDateFormatShortStyle];        NSDate *今天= [NSDate Date];        NSString * theDate = [formatter stringFromDate:today];        返回日期;        }

只使用电话 在其他课程的其他地方          NSString * theDate = [今日NSString];  这很容易没有搞乱默认或任何东西 会给你更多时间来担心更重要的事情 而不是获取和设置日期