Как сохранить настройки на iPhone сразу? - PullRequest
2 голосов
/ 27 января 2012

Можно ли сразу сохранить настройки на iPhone?Приложения на iOS 4+ не закрываются при выходе, и если я нажимаю «Остановить процесс» в настройках Xcode, они не сохраняются?Как их сохранить?

- (void)compLoad {
    compTotal = [[NSUserDefaults standardUserDefaults] integerForKey: @"compTotal"];
    compCount = [[NSUserDefaults standardUserDefaults] integerForKey: @"compCount"];
    compShow = [[NSUserDefaults standardUserDefaults] boolForKey: @"compShow"];
}

- (void)compSave {
    [[NSUserDefaults standardUserDefaults] setInteger: compTotal forKey: @"compTotal"];
    [[NSUserDefaults standardUserDefaults] setInteger: compCount forKey: @"compCount"];
    [[NSUserDefaults standardUserDefaults] setBool: compShow forKey: @"compShow"];
}

Ответы [ 5 ]

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

[[NSUserDefaults standardUserDefaults] синхронизация];

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

6 голосов
/ 27 января 2012

Согласно документации, следующий вызов сохранит все оставшиеся изменения. Чтобы убедиться, что это было успешно, проверьте возвращаемое значение этого вызова. Значение YES указывает на успех.

[[NSUserDefaults standardUserDefaults] synchronize];
3 голосов
/ 27 января 2012

Позвоните вашему compSave в вашем AppDelegate

- (void)applicationWillResignActive:(UIApplication *)application 
{
    // Call your compSave here to force saving before app is going to the background
}

также

- (void)compSave 
{
    [[NSUserDefaults standardUserDefaults] setInteger: compTotal forKey: @"compTotal"];
    [[NSUserDefaults standardUserDefaults] setInteger: compCount forKey: @"compCount"];
    [[NSUserDefaults standardUserDefaults] setBool: compShow forKey: @"compShow"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}
2 голосов
/ 27 января 2012

Просто позвоните [[NSUserDefaults standardUserDefaults] synchronize];. Но обычно вам нужно , а не : iOS сохранится, как только ваше приложение перейдет в фоновый режим, а также в нескольких других случаях. Слишком частый вызов synchronize считается плохим (tm).

1 голос
/ 27 января 2012

Попробуйте использовать метод synchronize.

Обновление : вам следует рассмотреть возможность регистрации значений по умолчанию, как это предлагается в Руководство по программированию предпочтений и настроек :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   // Register the preference defaults early.
   NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:@"CacheDataAgressively"];
   [[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];

   // Other initialization...
}

Кроме того, из этого руководства («Синхронизация и обнаружение изменений предпочтений»), касающегося синхронизации:

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

Уверен, вам все еще нужно использовать synchronize, если вы хотите перечитать настройки напрямую.

...