iOS - 无法将NSDate存储到NSUserDefaults中

Sat*_*yam 6 nsdate nsuserdefaults ios

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

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

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"CONSCIENCE_START_DATE"]);
Run Code Online (Sandbox Code Playgroud)

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

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

rma*_*ddy 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);
Run Code Online (Sandbox Code Playgroud)

  • 不,每次调用时都会调用`registerDefaults`.`registerDefaults`不写任何东西.它只提供一个值,如果检索值的调用否则返回`nil`.在这种情况下,使用`registerDefaults`是没有意义的. (3认同)