Невозможно прочитать значения из [NSUserDefaults standardUserDefaults] после синхронизации - PullRequest
0 голосов
/ 29 апреля 2010

В методе Application Delegate didFinishLaunching я использую следующий код для создания нового NSDictionary, который будет использоваться в качестве нового пакета настроек для пользователя:

NSNumber *testValue = (NSNumber*)[[NSUserDefaults standardUserDefaults] objectForKey:@"settingsversion"];
if (testValue == nil)
{
    NSNumber *numNewDB = [NSNumber numberWithBool:NO];
    NSNumber *numFirstUse = [NSNumber numberWithBool:YES];
    NSDate *dateLastStatic = [NSDate date];
    NSDate *dateLastMobile = [NSDate date];
    NSNumber *numSettingsversion = [NSNumber numberWithFloat:1.0];

    NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
                                 numNewDB, @"newdb",
                                 numFirstUse, @"firstuse",
                                 numSettingsversion, @"settingsversion",
                                 dateLastStatic, @"laststaticupdate",
                                 dateLastMobile, @"lastmobileupdate",
                                 nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

Позже в другом ViewController я пытаюсь прочитать значение из того же словаря, сохраненного как NSUserDefaults - по крайней мере, я думал, что это будет, но я не получаю никакого действительного указателя объекта для желаемого члена lastUpdate назад :

в .h файле:

NSDate *lastUpdate;

в файле .m в функции-члене:

lastUpdate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"laststaticupdate"];

Даже если я распечатываю содержимое [NSUserDefaults standardUserDefaults], я получаю только это:

2010-04-29 15:13:22.322 myApp[4136:207] Content of UserDefaults: <NSUserDefaults: 0x11d340>

Это приводит меня к выводу, что в памяти нет стандартного словаря пользователя UserDefaults или его нельзя определить как такую ​​структуру.

Редактировать: Каждый раз, когда я перезагружаю приложение на устройстве, проверка для testValue равна Nil, и я снова создаю словарь, но после одного запуска он должен быть постоянным на телефоне, верно?

Я делаю что-то не так между ними? У меня такое чувство, что я еще не совсем понял, как загружать и сохранять постоянные настройки для определенного приложения на iPhone.

Должен ли я что-нибудь сделать дополнительно к этому? Интегрировать файл settings.bundle в XCode или сохранить словарь вручную в папку «Документы»?

Может кто-нибудь помочь мне здесь? Большое спасибо!

1 Ответ

0 голосов
/ 29 апреля 2010

registerDefaults фактически ничего не записывает на диск. Он просто создает словарь «значения по умолчанию» в памяти. Поэтому каждый раз, когда вы перезапускаете приложение, testValue должно быть равно нулю.

Если вы хотите установить постоянные значения, используйте setObject:forKey:.

Однако я не знаю, почему вы не получаете верный объект.

...