Получить многозначные пользовательские настройки ios
Я пытаюсь получить значение, выбранное в приложении "Настройки", используя "Пакет настроек". Поле является "PSMultiValueSpecifier". В "Root.plist" я реализовал:
- Тип: PSMultiValueSpecifier
- Название: Abcdefg
- Ключ: abcdefg
- DefaultValue: aaa
Значения (массив):
Item 0: aaa Item 1: bbb
Заголовки (массив):
Item 0: A Item 1: B
И, в файле инструмента я написал:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *string = [defaults objectForKey:@"abcdefg"];
Но "строка" пуста. Когда я делаю то же самое с пользовательским типом по умолчанию: "PSTextFieldSpecifier", я могу получить значение.
Я следую инструкциям, изложенным в книге "Apress - Начало разработки под iOS 5: изучение iOS SDK", но не могу получить выбранное значение.
Инструкции те же, что и в "Справке по Apple Development".
Я не понимаю, в чем проблема. Это кажется легким.
4 ответа
Я нашел ошибку.
Если вы реализуете пользовательские настройки "Multi Value" в "Settings.bundle" (с его "значением по умолчанию"), но никогда не входите в настройки симулятора iPhone и никогда не меняете предпочтения с несколькими значениями, предложение:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *string = [defaults objectForKey:@"key"];
Возвращает нулевое значение. Невероятно, я потерял неделю, пытаясь найти проблему!!!!
Но у меня есть сомнения:
Если я реализую пользовательские настройки "Multi Value" и опубликую приложение в iTunes Store, но пользователь не использует эти пользовательские настройки "Multi Value", "NSUserDefaults" вернет значение nill?
Должен ли я рассмотреть возможность получения пустого значения?
На самом деле, я думаю, что это смешно.
Нет, я думаю, вам нужно зарегистрировать значение по умолчанию, например, в:
-(BOOL) application: (UIApplication*) application didFinishLaunchingWithOptions: (NSDictionary*) launchOptions
{
NSDictionary* defaults = @{@"key": @"default value"};
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}
Это потому, что приложение ничего не знает о пакете настроек, который он содержит. Страница 430 книги Beginning iOS6 Development: Exploring the iOS SDK
имеет четкое объяснение этого.
Кажется, что DefaultValue
используется только в официальном приложении Настройки. По-видимому, вы должны зарегистрировать значения по умолчанию: 1) протестировать одну из ваших настроек, чтобы увидеть, имеет ли она значение NULL, затем 2) перебрать настройки, получить и установить значения по умолчанию:
образец кода Obj-C для этогоjust.do.it
Документация по PSMultiValueSpecifier здесь кажется несовершенной. Путаница в этом проявляется по всему SO и в Интернете. Например:
Если возвращаемый объект - ноль, тогда установите значение по умолчанию.
NSString * key = @"the key";
NSUserDefaults * uD = [NSUserDefaults standardUserDefaults];
NSString * stringValue = [uD objectForKey:key];
if (!stringValue) {
stringValue = @"the default value";
[uD registerDefaults:@{key: stringValue}];
}