iOS – 无法将NSDate存储到NSUserDefaults中

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

NSDate* today = [NSDate date]; [[NSUserDefaults standardUserDefaults] registerDefaults: @{@"CONSCIENCE_START_DATE" : today}]; NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"CONSCIENCE_START_DATE"]); 

但每当我启动应用程序时,它都会打印应用程序启动的时间。 它不打印我开始的应用程序的date。

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

由于您的目标是跟踪第一次用户启动您的应用程序,您需要在application:didFinishLaunchingWithOptions这样的事情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); 

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

从Apple Docs :

在运行时,使用NSUserDefaults对象来读取应用程序在用户的默认数据库中使用的默认值。 NSUserDefaultscaching信息以避免每次需要默认值时打开用户的默认数据库。 同步方法会按周期自动调用,使内存中的caching保持同步

用户的默认数据库。

你可以用这种方式存储和检索

var startDate:NSDate? {

  get { return NSUserDefaults.standardUserDefaults().objectForKey(BCGConstants.UserDefaultsKey.startDateKey) as? NSDate } set { NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: BCGConstants.UserDefaultsKey.startDateKey) NSUserDefaults.standardUserDefaults().synchronize() } }