Хранение NSMutableArray с NSUserDefaults - PullRequest
3 голосов
/ 10 мая 2011

В моем проекте я использую NSMutableArray в делегате приложения с NSUserDefaults:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

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

и

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

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

проблема в том, что когда я пишу в классе, например, firstViewController.m, в viewdidload:

NSLog(@"number of element:%d", appDelegate.array.count);

результат всегда равен 2, но если я напишу

[appDelegate.array removeAllObjects];

тогда результат подсчета равен "0". Когда я перезапускаю приложение, счет снова «2». Что я могу сделать, чтобы в массиве было ноль объектов при перезапуске приложения?

Ответы [ 2 ]

4 голосов
/ 10 мая 2011

Вам необходимо добавить вызов - [NSUserDefaults синхронизировать] после обновления значения «массив» в applicationWillTerminate.Обычно это периодически вызывается для вас, но в вашем случае вы обновляете значение при завершении, поэтому вам необходимо явно сохранить его перед выходом.

0 голосов
/ 24 февраля 2012

При многозадачности applicationWillTerminate: обычно не вызывается до того, как приложение будет убито.Вы можете обновить пользовательские значения по умолчанию новым значением массива сразу после его изменения (и, да, вызвать синхронизацию позже) или, если по какой-то причине вы действительно хотите отложить сохранение до пользовательских значений по умолчанию, вы можете вместо этого использовать метод UIApplication applicationWillResignActive: Delegate.

...