Получить многозначные пользовательские настройки 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}];
}
Другие вопросы по тегам