IOS: сохранить массив с NSUserDefault - PullRequest
8 голосов
/ 27 сентября 2011

Я хочу сохранить массив с NSUserDefault, затем я вставляю applicationDidEnterBackground

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

и application didFinishLaunchingWithOption

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

это нормально для многозадачного устройства, но для не многозадачного устройства, как я могу решить?

Ответы [ 6 ]

10 голосов
/ 27 сентября 2011

Сохраните объект в NSUserDefaults в -applicationWillTerminate:, если он еще не был сохранен вызовом -applicationDidEnterBackground: (т.е. проверьте, поддерживается ли многозадачность, если это так, то не сохраняйте его, потому что он уже был сохранен.)

- (void) applicationWillTerminate:(UIApplication *) app {
    if([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)] &&
       ![[UIDevice currentDevice] isMultitaskingSupported]) {
       [[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"];
    }
}
7 голосов
/ 14 ноября 2012

Не забудьте синхронизировать буфер перед переходом в фоновый режим:

[[NSUserDefaults standardUserDefaults] synchronize];
3 голосов
/ 25 октября 2011

Все предыдущие ответы верны, но учтите, что ни applicationDidEnterBackground, ни applicationWillTerminate не гарантированно будут вызываться во всех ситуацияхОбычно вам лучше хранить важные данные, когда они изменились.

0 голосов
/ 20 сентября 2014

и не забудьте использовать encodeWithCoder и initWithCoder внутри объекта, который вы пытаетесь сохранить и который содержится в массиве

0 голосов
/ 27 сентября 2011

набор

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

в

applicationWillTerminate
0 голосов
/ 27 сентября 2011

Сохранить NSUserDefaults на

- (void)applicationWillTerminate:(UIApplication *)application 
...