无法将NSDate存储到NSUserDefaults中

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

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

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"CONSCIENCE_START_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文档:

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

用户的默认数据库。


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

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()
    }
}
链接地址: http://www.djcxy.com/p/85175.html

上一篇: Not able to store NSDate into NSUserDefaults

下一篇: UIDatePicker for time returns very strange results