iOS - 无法将NSDate存储到NSUserDefaults中

时间:2013-07-11 15:23:13

标签: ios nsdate nsuserdefaults

在我的应用程序中,我想首次存储应用程序启动的日期 我在应用程序中使用以下代码:didFinishLaunchingWithOptions方法

NSDate* today = [NSDate date];
[[NSUserDefaults standardUserDefaults] registerDefaults: @{@"CONSCIENCE_START_DATE" : today}];

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"CONSCIENCE_START_DATE"]);

但每次启动应用程序时,它都会打印应用程序启动的时间。它没有打印我启动应用程序的日期。

我尝试重置模拟器并再次运行代码。仍然没有成功。有人可以指出我的代码中的错误吗?

2 个答案:

答案 0 :(得分:15)

由于您的目标是跟踪用户首次启动您的应用,因此您需要application:didFinishLaunchingWithOptions中的类似内容:

NSDate *date = [[NSUserDefaults standardUserDefaults] objectForKey:@"CONSCIENCE_START_DATE"];
if (!date) {
    // This is the 1st run of the app
    date = [NSDate date];
    [[NSUserDefaults standardUserDefaults] setObject:date forKey:@"CONSCIENCE_START_DATE"]; // Save date
}

NSLog(@"First run was %@", date);

答案 1 :(得分:4)

设置值后,您需要调用[[NSUserDefaults standardDefaults] synchronize]

来自Apple Docs

  

在运行时,您使用NSUserDefaults对象来读取默认值   您的应用程序使用用户的默认数据库。 NSUserDefaults的   缓存信息以避免必须打开用户的默认值   数据库每次需要默认值时。同步方法,   它会定期自动调用,保持   与

同步的内存缓存

用户的默认数据库。