NSUserDefaults: Для чего нужен метод + resetStandardUserDefaults? Как я могу предоставить «настройки системы»? - PullRequest
2 голосов
/ 22 мая 2009

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

NSInteger avatarID = (NSInteger) [[NSUserDefaults standardUserDefaults] objectForKey: @ "avatar"];

Я должен проверить, является ли он нулевым, и затем использовать мои системные настройки. Но потом я увидел это в документации: + resetStandardUserDefaults

Есть ли где-нибудь две ветви настроек по умолчанию? Те от пользователя, а те от разработчика?

1 Ответ

6 голосов
/ 22 мая 2009

Да, но это немного отличается от того, что вы делаете. NSUserDefaults имеет метод registerDefaults, который позволяет заполнять «пустые» значения по умолчанию из NSDictionary указанными вами значениями. Поместите это в метод + initialize вашего контроллера приложения, и вы поймете, что значения по умолчанию разумны. Если объект по умолчанию пользователя находит «реальное» значение ключа, которое вы установили во время текущего запуска приложения или загрузили с диска, оно всегда будет иметь приоритет над тем, что вы указали в registerDefaults. resetStandardUserDefaults удалит объект общих пользовательских настроек по умолчанию из памяти и отменит все настройки, которые вы сделали для него, вам не нужно предоставлять значения по умолчанию.

Кроме того, имейте в виду, что вы не можете просто привести объект к примитивному значению NSInteger, как вы делаете, вы просто получите число, представляющее ячейку памяти указателя объекта. Либо используйте NSUserDefault integerForKey: для непосредственного получения примитива, либо используйте objectForKey: для получения NSNumber и используйте integerValue для получения значения примитива.

...