iOS - Not able to store NSDate into NSUserDefaults

久未见 提交于 2019-12-07 02:50:48

问题


In my application, i want to store the date at which the app is started for the first time.
I'm using following code in application:didFinishLaunchingWithOptions method

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

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

But every time when i start the application, its printing the time at which the app is starting. Its not printing the date at which i started the app.

I tried to reset the simulator and ran the code again. Still no success. Can some one point me the error in my code please?


回答1:


Since your goal to is keep track of the very first time a user starts your app, you need something like this in 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);



回答2:


You need to call [[NSUserDefaults standardDefaults] synchronize] after you set the value.

From the Apple Docs:

At runtime, you use an NSUserDefaults object to read the defaults that your application uses from a user’s defaults database. NSUserDefaults caches the information to avoid having to open the user’s defaults database each time you need a default value. The synchronize method, which is automatically invoked at periodic intervals, keeps the in-memory cache in sync with

a user’s defaults database.



来源:https://stackoverflow.com/questions/17597402/ios-not-able-to-store-nsdate-into-nsuserdefaults

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!