`[NSUserDefaults standardUserDefaults]` возвращает ноль

Я хочу сохранить некоторые пользовательские настройки, но

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

просто возвращает nil.

Библиотека для разработчиков iOS говорит, что это должно вернуть существующий общий объект по умолчанию или создать его, если его не существует... Что я упустил?

Я также использую Appirater, и там все это тоже не работает...

Этот код вызывается, когда пользователь нажимает кнопку...

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int index = ([defaults integerForKey:@"BackgroundColorSpecifier"]+ 1)%self.backgroundColors.count;
[defaults setInteger:index forKey:@"BackgroundColorSpecifier"];
[defaults synchronize];

Это вызывается в application: didFinishLaunchingWithOptions:

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
[standardDefaults registerDefaults:@{@"BackgroundColorSpecifier": @0}];
[standardDefaults synchronize];

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

Я понятия не имею, что происходит... Пожалуйста, помогите!


person Robin des Bois    schedule 19.12.2013    source источник
comment
как вы обнаружили, что defaults равно нулю? Вы поставили точку останова на этой строке?   -  person KIDdAe    schedule 19.12.2013
comment
Да... и везде где [NSUserDefaults standardUserDefaults] называется nil...   -  person Robin des Bois    schedule 19.12.2013
comment
Я не думаю, что значения по умолчанию равны нулю. Как ты это проверишь? Я думаю, вы пытаетесь получить ключ от NSUserDefaults, который не существует и равен нулю.   -  person dehlen    schedule 19.12.2013
comment
Итак, вы правы, ничего не регистрируется... Но посмотрите на это: [скриншот]{dropbox.com/s/7k5kup9iaa9wihw/}   -  person Robin des Bois    schedule 19.12.2013
comment
Конфигурация сборки = выпуск или отладка?   -  person djshiow    schedule 19.12.2013


Ответы (2)


Скорее всего, это проблема с отладчиком, особенно с другими вашими проблемами. Я видел подобные вещи в своих собственных проектах, но у меня нет надежного способа их очистки, кроме обычных опций перезапуска/очистки.

NSLogs обычно дает более последовательные результаты, чем отладчик, если у отладчика выходной.

NSUserDefaults не нарушен. Мы бы уже слышали об этом.

person jrturton    schedule 19.12.2013

вы можете использовать эту функцию для регистрации вашего userDefaults dic

 - (void)logCache
    {
        NSDictionary * dic = [[NSBundle mainBundle] infoDictionary];
        NSString *bundleId = [dic  objectForKey: @"CFBundleIdentifier"];
        NSUserDefaults *appUserDefaults = [[NSUserDefaults alloc] init];
        NSDictionary *cacheDic = [appUserDefaults persistentDomainForName: bundleId];
        NsLog(@"cacheDic::%@",cacheDic);
    }
person signal    schedule 19.12.2013