iphone: возможно получить заголовки из спецификатора PSMultiValueSpecifier в файле settings.bundle? - PullRequest
0 голосов
/ 13 января 2010

Я планирую использовать заголовки в PSMultiValueSpecifier из settings.bundle в окне выбора. Я знаю только, как получить выбранное значение на основе ключа из settings.bundle. Можно ли получить ВСЕ названия на основе ключа?

Ответы [ 2 ]

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

Вот моя версия, которая также использует спецификатор KEY для определения местоположения PSMultiValueSpecifier без запоминания, по какому индексу он расположен. Со временем индексы могут изменяться (из-за изменений в комплекте настроек).

NSString* settingsBundle = [[[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"] stringByAppendingPathComponent:@"Root.plist"];</p> <pre><code>NSDictionary* rootPlist = [NSDictionary dictionaryWithContentsOfFile:settingsBundle]; if (rootPlist == nil) return nil; NSArray* specifiers = [rootPlist objectForKey:@"PreferenceSpecifiers"]; NSDictionary *multiValueSpecifier = nil; for (NSDictionary *specifier in specifiers) { if ([[specifier objectForKey:@"Key"] isEqualToString:speficierKey] == YES && [[specifier objectForKey:@"Type"] isEqualToString:@"PSMultiValueSpecifier"] == YES) { multiValueSpecifier = specifier; break; } } if (multiValueSpecifier == nil) return nil; NSArray* titlesArray = [multiValueSpecifier objectForKey:@"Titles"]; NSArray* valuesArray = [multiValueSpecifier objectForKey:@"Values"]; NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:titlesArray forKeys:valuesArray]; return dictionary;

1 голос
/ 13 января 2010

(может быть, есть более элегантный способ). Вы можете получить словарь настроек и просмотреть его содержимое (при условии, что вы знаете его внутреннюю структуру):

NSString* listPath = [[[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"] stringByAppendingPathComponent:@"Root.plist"];
NSDictionary* ttDict = [NSDictionary dictionaryWithContentsOfFile:listPath];
if (ttDict != nil){
    NSArray* prefsArray = [ttDict objectForKey:@"PreferenceSpecifiers"];
    // Next you get dictionary for required setting by its index (you should know it)
    NSDictionary* settingDict = [prefsArray objectAtIndex: index];
    NSArray* titlesArray = [settingDict objectForKey:@"Titles"]; // Voila
}

Обратите внимание, что названия, которые вы получаете таким образом, не локализованы.

...