Reputation: 17591
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
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
Reputation: 4409
Do not forget to sync the buffer before going into background:
[[NSUserDefaults standardUserDefaults] synchronize];
Upvotes: 7
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
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
Reputation: 8109
set
[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"];
in
applicationWillTerminate
Upvotes: 0
Reputation: 914
Save NSUserDefaults at
- (void)applicationWillTerminate:(UIApplication *)application
Upvotes: 0