2010-08-10 5 views
-1

Je sais que NSUserDefaults peut lire la clé et la valeur du fichier plist. Est-il possible de lire la structure d'une clé?Est-il possible de lire la structure du fichier plist?

Par exemple:

Key 'Count' est un entier et a l'option 1,2,3,4,5

les codes ci-dessous peuvent obtenir 'Count' la valeur

NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 

if([defaults objectForKey:@"Count"]!=nil) 
{ 

    NSString *s=[[NSString alloc] initWithString: [defaults objectForKey:@"Count"]]; 
    NSInteger v=[s intValue]; 
    [s release]; 
} 

Mais je préfère obtenir toutes les options et stocker dans un NSArray ou une meilleure structure de stockage.

Est-ce possible?

+1

Voulez-vous dire que vous voulez lire les valeurs possibles du paramètre PSMultiValueSpecifier dans le fichier Settings.bundle de votre application? – Vladimir

Répondre

1

Je lis les paramètres faisceau de la manière suivante:

// Get path to Root.plist file in settings bundle and retrieving its contents 
NSString* tPath = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"]; 
settingsBundle = [[NSBundle bundleWithPath:tPath] retain]; 
NSDictionary* tSetDict = [NSDictionary dictionaryWithContentsOfFile:[tPath stringByAppendingPathComponent:@"Root.plist"]]; 

// Get array of preference dictionaries 
NSArray* prefs = [tSetDict objectForKey:@"PreferenceSpecifiers"]; 

// Iterate through dictionaries to find required value 
for (NSDictionary* setDict in prefs){ 
    NSString* type = [setDict objectForKey:@"Type"]; 
    if (![type isEqualToString:@"PSMultiValueSpecifier"]){ 
     // Get possible preference values for PSMultiValueSpecifier case 
     // You may need to know value type in advance - not sure about that 
     NSArray* values = [setDict objectForKey:@"Values"]; 
    } 
} 
1

Je ne suis pas sûr que je comprends votre question, mais vous ne pouvez pas accéder directement au système des valeurs par défaut enregistrer par ses méthodes définies. Vous ne pouvez pas les lire dans un gros morceau. Le système par défaut n'est pas réellement un moyen de lire des fichiers plist, c'est plus une API pour accéder à une base de données maintenue par le système d'exploitation lui-même. Bien que, vous ne le voyez pas beaucoup sur l'iPhone, c'est en fait un système très vaste et complexe pour gérer les préférences non seulement pour les applications individuelles mais aussi pour les utilisateurs, les groupes d'utilisateurs, les ordinateurs et les réseaux. Cela semble trivial sur iOS car vous n'avez pas la flexibilité de configuration et d'utilisation que vous avez sur MacOS.

Il serait impossible de lire toutes les valeurs par défaut car elles sont énormes et beaucoup plus grandes que ce que vous attendez même sur iOS. Au lieu de sauter par les cerceaux dans le code que vous avez montré dans la réponse, vous devez accéder aux données de la clé en utilisant l'une des méthodes dédiées pour le type de données stockées. Dans ce cas:

NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 
NSInteger v=[defaults integerForKey:@"Count"]; 

Même si vous avez bien lu les valeurs par défaut dans l'un morceau, vous venez de vous trouver en utilisant le même type d'appels et le code pour accéder aux données dans la structure de données de remplacement comme vous le feriez à utiliser les défauts en premier lieu. Vous pouvez aussi bien utiliser le système par défaut.

Questions connexes