2017-01-17 4 views
1

Я создал приложение, и я пытаюсь получить доступ к URL-адресу, который хранится в файле plist. В этом состоянии я просто пытаюсь записать содержимое. Я знаю, что подобные вопросы были заданы раньше, но я задаю конкретно мой сценарий, как мне получить доступ к Item 0. Я пытаюсь получить доступ к Item 0 внутри InternalViaSafari, что проявляется внутри URLValidator, а затем внутри Root. Код, который я до сих пор: plist fileObjective-C Access Specific Item in 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

beter use nsuserdefalt, чем plist. – Arun

+0

Это невозможно, потому что мне нужно несколько слоев для различных конфигураций. – DaveDavidson

ответ

1

Вы не можете использовать keyPath как, что для этого, насколько я знаю. InternalViaSafari не является собственностью слова URLValidator. Более InternalViaSafari является Array не String в вашем plist.

Для того, чтобы получить эту строку вам нужно что-то вроде этого:

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

Что здесь происходит, является то, что вы получаете значение под URLValidator ключ от вашего plist словаря. Это значение также является Dictionary (это хорошо видно на скриншоте plist, который вы поделили), поэтому вы получаете значение под ключом InternalViaSafari. Это значение, в свою очередь, является Array, которое в качестве своих элементов имеет Strings. В этом примере я извлек первую запись из этого массива.

+0

Я получаю сообщение об ошибке из этого 'Property firstObject не найден на объекте типа id_Nullable' – DaveDavidson

+0

Извините, я сделал опечатку! Слишком много Swift в последнее время, и я забыл, что вам нужно префикс строковых литералов с '@' в Objective-C :) – Losiowaty

+0

haha ​​no probs, я также сделал редактирование :) – DaveDavidson