8

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?

6 Answers 6

10

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"];
    }
}
Sign up to request clarification or add additional context in comments.

1 Comment

As pointed out in another answer, you need to synchronize the defaults after setting the object. [[NSUserDefaults standardUserDefaults] synchronize];
7

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

[[NSUserDefaults standardUserDefaults] synchronize];

Comments

3

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.

Comments

0

Save NSUserDefaults at

- (void)applicationWillTerminate:(UIApplication *)application 

Comments

0

set

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

in

applicationWillTerminate

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.