2013-09-02 7 views
-3

Ребята У меня быстрый вопрос. Я прочитал несколько подобных ответов, но они были менее прагматичными.NSUserDefaults Как я могу проверить, будет ли он сохранен, если пользователь удалит приложение из памяти?

При выходе из xCode NSUserDefaults не сохраняются. Но как я могу проверить, когда я выложил свое приложение из памяти iPhone (на реальном устройстве), чтобы мои NSUserDefaults действительно были сохранены? Можно ли проверить симулятор? Или мой код неправильный?

У меня есть этот код в виде контроллера, который я называю settingsViewController (нет NSUserDefaults в моем appDelegate).

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    defaults = [NSUserDefaults standardUserDefaults]; 
} 

- (IBAction)firstAlert:(UISwitch *)sender 
{ 
    [defaults setBool:firstAlert.on forKey:@"firstAlert"]; 
    [defaults synchronize]; 
    NSLog(@"%d",[defaults boolForKey:@"firstAlert"]); 
} 
+0

Отправка сообщения синхронизации приводит к немедленному сохранению значений по умолчанию. Когда приложение получает (force-) завершение, синхронизация не требуется. Так в чем проблема? –

+0

Значит, мне нужно сохранить его на диск через NSCoding, если я хочу, чтобы настройки выдержали завершение приложения? –

+1

Как участвует NSCoding? Я, хотя вы просто сохраняли bool для 'NSUserDefaults'? –

ответ

1

Фактическое резервное хранилище (локальный домен) NSUserDefaults в Library/Preferences/<bundle-identifier>.plist. Вы можете скопировать этот файл на свой Mac и проверить его содержимое с помощью Xcode.

Если вы обнаружите, что ваши предпочтения не сохраняются, я бы посмотрел на вашу переменную defaults. Держу пари, что он не инициализирован.

+0

Спасибо, это помогло. Мое расположение файла немного отличается, но благодаря следующим учебникам Core Data от Stanford CS193P и отладке значений url, и этот ответ я смог найти файл, он находится в файле: // localhost/Users/username/Library/Application% 20Support/iPhone% 20Simulator/6,1/применения/take_most_recently_used_gibberish_string/Library/Preferences / –

1

Когда вы выходите из xcode, ударяя его, это не спасет. Нажмите кнопку «домой» и попробуйте.

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 
if (standardUserDefaults) { 
    [standardUserDefaults setObject:myString forKey:@"Prefs"]; 
    [standardUserDefaults synchronize]; 
} 
+0

Парус, если вы выделите свой код и нажмете 'Ctrl + k', он отформатирует его как код для вас (вы можете видеть ниже) – pfrank

+0

Я ответил на это со своего мобильного телефона. :-) – Sail

0

Благодаря ответу Николая Рухе я понял, что я пропустил, и почему я задал вопрос в первую очередь. Казалось, что начальные настройки не были установлены, и это потому, что я не передал эти строки кода в мой viewDidLoad. Это тот же ответ, что и Sail, но я еще не видел связи между этим кодом и viewDidLoad. Это полная реализация, необходимая в моем методе.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    defaults = [NSUserDefaults standardUserDefaults]; 

    if(defaults){ 
     firstAlert.on = [defaults boolForKey:@"firstAlert"]; 
    } 
} 

Обратите внимание, что это не ответ на мой реальный вопрос, реальный ответ был одним из них. Этот ответ просто показывает, как я использовал свой ответ, чтобы понять корень моей проблемы.

Смежные вопросы