NSUserDefault занимает несколько секунд, чтобы зарегистрировать значения, которые я передаю? - PullRequest
3 голосов
/ 20 ноября 2010

Я передаю целочисленное значение в объект NSUserDefault, чтобы сохранить его для использования при загрузке моего приложения. I HAD это работало отлично, пока я не попытался переключить это целочисленное значение в число с плавающей точкой. Это вызвало целую кучу проблем, поэтому я изменил свой подход, и команда-z вернулась к безопасности целых чисел ... или так я думал.

Раньше было так, что если я сохранял значение, я мог немедленно закрыть свой симулятор, и консоль без проблем выплюнула бы правильно сохраненный номер. ТЕПЕРЬ, после этого глупого беспорядка с плавающей точкой (Мог ли я повредить мой объект NSUserDefault? Это просто звучит глупо ...), получение нужного числа для отображения - это нечто вроде игры.

Я прошел с кучей NSLogs и могу подтвердить, что значение, которое я сохраняю, когда нажимаю сохранить, правильно передается методу set в классе UserDefault. Метод set получает значение правильно, а затем устанавливает его для объекта NSUD следующим образом:

[self setObject:[NSNumber numberWithInteger:num] forKey:savedNum];

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

Если я нажму кнопку «Сохранить» и подожду 5 секунд, прежде чем закрыть приложение, оно раньше работало правильно, но редко. Если я подожду 10 секунд, он выплевывает правильный номер.

Почему время имеет какое-либо отношение к этой операции? Я просто в полной растерянности относительно того, почему это происходит, особенно потому, что у меня это работало правильно только вчера ...

Буду признателен за любые мысли или пожелания !!

Ответы [ 3 ]

9 голосов
/ 20 ноября 2010

Вы удостоверились, что -synchronize NSUserDefaults?

1 голос
/ 20 ноября 2010

Я никогда не замечал такого поведения - и я не думаю, что это тот случай, когда есть задержка.

Итак, самый очевидный вопрос:

Если вы делаете:

[[NSUserDefaults standardUserDefaults] setInteger:value ForKey:@"myInteger"];
NSLog(@"It is %d",[[NSUserDefaults standardUserDefaults] integerForKey:@"myInteger"]);

Вы получаете правильное значение?

0 голосов
/ 20 ноября 2010

Я считаю, что это ошибка симулятора. В приложении на смоделированном устройстве откройте файл Settings.app. Теперь выйдите из Settings.app. Ваши настройки по умолчанию внезапно начнут работать.

См. Также эту ветку на дискуссионных форумах Apple о проблеме non-sticky NSUserDefaults .

...