2010-01-13 1 views

답변

1

여기에 지정자 KEY를 사용하여 어떤 인덱스가 있는지 기억하지 않고 PSMultiValueSpecifier를 찾는 내 버전입니다. 시간이 지남에 따라 색인이 변경 될 수 있습니다 (설정 번들의 변경으로 인해).

NSString* settingsBundle = [[[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"] stringByAppendingPathComponent:@"Root.plist"];

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; 

+0

재미있는 솔루션, 그것을 공유 주셔서 감사합니다 :) – Madoc

1

(더 우아한 방법이있을 수 있습니다.) 당신은 (당신은 그것의 내부 구조를 알고 제공) 설정 사전을 얻고 그 내용을 찾아 볼 수 있습니다 :이 방법을 얻을 제목 지역화되지 않습니다

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 
} 

참고.

+0

네, 이건 꿈처럼 작동합니다, 감사합니다! :) – Madoc