2015-10-23 4 views
-1

Я использую NSUserDefaults для сохранения BOOL, которые обозначают, является ли отображаемая аннотация «любимой». BOOLs сохраняются правильно, когда Пользователь выходит из приложения, а затем снова запускает его. Однако, когда пользовательская команда завершает работу (дважды нажмите кнопку «Домой» и проверив приложение) приложение, NSUserDefaults будут потеряны. Может кто-нибудь объяснить, почему это происходит? Я использую Xcode v7.0.Установки Xcode NSUserDefaults потеряны, когда приложение принудительно завершено

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 

// If annotation is displayed, the User can save/clear annotation as a favorite 
if ((_acmeMotorsIsDisplayed == YES) && (_acmeMotorsIsFavorite == YES)){ 
      _acmeMotorsIsFavorite = NO; 
      [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"acmeMotorsIsFavorite"]; 
     } 
else if ((_acmeMotorsIsDisplayed == YES) && (_acmeMotorsIsFavorite == NO)){ 
      _acmeMotorsIsFavorite = YES; 
      [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"acmeMotorsIsFavorite"]; 
     } 
} 

-(void)loadUserDefaults{ 
// One of many lines of code that load user default settings 
_acmeMotorsIsFavorite = [[NSUserDefaults standardUserDefaults] boolForKey:@"acmeMotorsIsFavorite"]; 
} 

-(void)viewDidLoad { 
    [self loadUserDefaults]; 
} 
+2

так много простофиль этого вопроса ... является Google вниз ?? –

ответ

1

Я думаю, вы забыли о synchronize методе.

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults setBool:NO forKey:@"acmeMotorsIsFavorite"]; 
[userDefaults synchronize]; 
+1

Спасибо. Я попробовал команду synchronize, но это не решило мою проблему, поэтому я решил не включать ее в свой примерный код. Значение BOOL правильное в applicationWillResignActive. Однако значение BOOL в viewDidLoad при повторном запуске приложения всегда равно NO. Я пробовал десятки решений, найденных на SO и других сайтах. И это особенно неприятно, так как у меня есть приложение, работающее отлично. Единственное отличие заключается в том, что я использую NSUserDefaults для сохранения целых чисел в другом приложении, а не BOOL. Зная это, какие-либо дополнительные мысли о том, почему я не могу спасти BOOL? – Cheesehead1957

1

Когда пользователь дважды отводы Главного метод делегата приложения applicationWillResignActive: называются, в то время синхронизации NSUserDefaults:

- (void)applicationWillResignActive:(UIApplication *)application { 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
Смежные вопросы