NSUserDefaults, записанные в -applicationWillTerminate: не вступают в силу; Зачем? - PullRequest
4 голосов
/ 18 января 2012

Я поместил приведенный ниже код в мой AppDelegate, но когда я снова запускаю приложение, я замечаю, что значения все еще сохраняются (не NULL). Почему это так?

код:

    - (void)applicationWillTerminate:(UIApplication *)application
{       [[NSUserDefaults standardUserDefaults]
         setObject:NULL forKey:@"roomCat"];
        [[NSUserDefaults standardUserDefaults]
         setObject:NULL forKey:@"TFA"];
        [[NSUserDefaults standardUserDefaults]
        setObject:NULL forKey:@"comments"];

}

Спасибо.

Ответы [ 4 ]

9 голосов
/ 18 января 2012

Вы должны использовать -removeObjectForKey: вместо настройки NULL.Первый - это официальный способ удаления значений, а второй - недокументированное поведение.

В любом случае, если использование -removeObjectForKey: не работает, вы можете добавить вызов к

[[NSUserDefaults standardUserDefaults] synchronize];

в конце.Но делайте это только в том случае, если это не работает без него.Причина в том, что вызов -synchronize (относительно) дорогой, поэтому его следует выполнять только тогда, когда это необходимо для обеспечения правильности.


После еще одного взгляда, я подозреваю, что ваша настоящая проблема заключается в том, что этот метод неТ звонят вообще.В iOS 4 и более поздних версиях, когда приложения входят в фоновый режим, они не вызывают этот метод, вместо этого они вызывают -applicationDidEnterBackground:.Вы должны попробовать поместить этот код вместо этого.

3 голосов
/ 18 января 2012

В этом случае я ожидаю, что вам нужно будет вручную вызвать метод синхронизации для NSUserDefaults в качестве последней строки в этом методе, чтобы обеспечить его синхронизацию до завершения работы приложения.

0 голосов
/ 24 декабря 2012
 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];


 if (prefs) 
{

    [prefs setObject:NULL forKey:@"roomCat"];
    [prefs synchronize];
}
0 голосов
/ 18 января 2012

попробуйте этот метод вместо:

- (void)removeObjectForKey:(NSString *)defaultName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...