2010-01-13 9 views

Répondre

1

Voici ma version qui utilise également le spécificateur KEY pour localiser le PSMultiValueSpecifier sans se souvenir de l'index où il se trouve. Les index peuvent changer au fil du temps (en raison de changements dans le groupe de paramètres).

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

solution intéressante, merci de le partager :) – Madoc

1

(Peut-être il y a plus de manière élégante). Vous pouvez obtenir les paramètres dictionnaire et parcourir son contenu (à condition de connaître sa structure interne):

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 
} 

Notez que les titres que vous obtenez cette façon ne sont pas localisés.

+0

Oui, cela fonctionne comme un rêve, merci! :) – Madoc