6

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

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

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

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

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

4

2 回答 2

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);
于 2013-07-11T15:32:07.160 回答
4

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

来自苹果文档

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

用户的默认数据库。

于 2013-07-11T15:25:58.060 回答