Je prévois d'utiliser les titres d'un PSMultiValueSpecifier de settings.bundle dans une sélection. Je sais seulement comment obtenir ma valeur sélectionnée basée sur la clé de settings.bundle. Est-il possible d'obtenir TOUS les titres en fonction de la clé?iphone: Est-il possible d'obtenir des titres à partir d'un PSMultiValueSpecifier dans settings.bundle?
Répondre
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;
(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.
Oui, cela fonctionne comme un rêve, merci! :) – Madoc
solution intéressante, merci de le partager :) – Madoc