2010-01-13 73 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 2010-11-15 09:58:38

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 2010-01-13 11:28:51

相關問題