cyclingIsBetter
cyclingIsBetter

Reputation: 17591

IOS: store an array with NSUserDefault

I want to store an array with NSUserDefault, then, I put in applicationDidEnterBackground

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"];

and in application didFinishLaunchingWithOption

myArray= [[NSMutableArray alloc] 
          initWithArray:[[NSUserDefaults standardUserDefaults] 
           objectForKey:@"myArray"]];

it's ok for multitasking device, but for not-multitasking device, how can I solve?

Upvotes: 8

Views: 23221

Answers (6)

Catalin
Catalin

Reputation: 1899

and don't forget to use the encodeWithCoder and initWithCoder inside the object that you are trying to save and that is contained in the array

Upvotes: 0

Vincent
Vincent

Reputation: 4409

Do not forget to sync the buffer before going into background:

[[NSUserDefaults standardUserDefaults] synchronize];

Upvotes: 7

fishinear
fishinear

Reputation: 6336

The previous answers are all correct, but note that neither applicationDidEnterBackground nor applicationWillTerminate are guaranteed to be called in all situations. You are usually better off storing important data whenever it has changed.

Upvotes: 3

Jacob Relkin
Jacob Relkin

Reputation: 163238

Store the object in NSUserDefaults in -applicationWillTerminate:, if it hasn't already been saved by the invocation of -applicationDidEnterBackground: (i.e. check if multitasking is supported, if it is, then don't save it because it's already been saved.)

- (void) applicationWillTerminate:(UIApplication *) app {
    if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)] &&
       ![[UIDevice currentDevice] isMultitaskingSupported]) {
       [[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"];
    }
}

Upvotes: 10

Saurabh Passolia
Saurabh Passolia

Reputation: 8109

set

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"];

in

applicationWillTerminate

Upvotes: 0

kv0
kv0

Reputation: 914

Save NSUserDefaults at

- (void)applicationWillTerminate:(UIApplication *)application 

Upvotes: 0

Related Questions