Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS - Not able to store NSDate into NSUserDefaults

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?

like image 889
Satyam Avatar asked Jul 11 '13 15:07

Satyam


2 Answers

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);
like image 129
rmaddy Avatar answered Nov 13 '22 17:11

rmaddy


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.

like image 4
Alfie Hanssen Avatar answered Nov 13 '22 15:11

Alfie Hanssen