2017-01-17 1 views
1

J'ai créé une application, et j'essaie d'accéder à une URL qui est stockée dans un fichier plist. À cet état, j'essaie juste de déconnecter le contenu. Je suis conscient que des questions similaires ont déjà été posées, mais je demande spécifiquement à mon scénario comment accéder à Item 0. J'essaie d'accéder Item 0 à l'intérieur InternalViaSafari cela se manifeste à l'intérieur de la URLValidator, puis à l'intérieur de la Root. Le code que j'ai à ce jour est: plist fileObjective-C Access élément spécifique dans Plist

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"plist-file-name" ofType:@"plist"]; 
NSDictionary* plist = [NSDictionary dictionaryWithContentsOfFile:filePath]; 
NSString* name = [plist valueForKeyPath:@"URLValidator.InternalViaSafari"]; 
NSLog(name); 
+0

de plus utiliser nsuserdefalt que le plist. – Arun

+0

Ce n'est pas possible parce que j'ai besoin de plusieurs plistes pour diverses config. – DaveDavidson

Répondre

1

Vous ne pouvez pas utiliser keyPath comme ça pour ce que autant que je sache. InternalViaSafari n'est pas une propriété de URLValidator dictionnaire. Quoi de plus InternalViaSafari est un Array pas un String dans votre plist.

Afin d'obtenir cette chaîne que vous auriez besoin de quelque chose comme ceci:

NSArray *internalViaSafari = plist[@"URLValidator"][@"InternalViaSafari"]; 
NSString *name = internalViaSafari.firstObject; 

Qu'est-ce qui se passe ici, est que vous obtenez la valeur sous la clé de votre URLValidatorplist dictionnaire. Cette valeur est également un Dictionary (cela peut être clairement vu dans la capture d'écran de plist que vous avez partagé), de sorte que vous obtenez la valeur sous la clé InternalViaSafari. Cette valeur est à son tour Array, qui a Strings comme éléments. Dans cet exemple, j'ai extrait la première entrée de ce tableau.

+0

Je reçois une erreur de cette 'Property firstObject introuvable sur l'objet de type id_Nullable' – DaveDavidson

+0

Désolé, j'ai fait une faute de frappe! Trop Swift ces derniers temps, et j'ai oublié que vous devez préfixer les littéraux de chaîne avec '@' en Objective-C :) – Losiowaty

+0

haha ​​pas de problèmes, j'ai aussi fait un edit :) – DaveDavidson