Подтвердить что ты не робот

Разбор Plist (NSString) в NSDictionary

Итак, у меня есть структурированная строка plist, которая получается динамически (не из файловой системы). Как преобразовать эту строку в NSDictionary.

Я попытался преобразовать его NSData, а затем в NSDictionary с NSPropertyListSerialization, но он возвращает "[NSCFString objectAtIndex:]: нераспознанный селектор, отправленный экземпляру 0x100539f40", когда я пытаюсь получить доступ к NSDictionary, показывая, что мой словарь не был успешно создан.

Пример NSString (это данные plist):

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
 <key>Key1</key> 
 <dict> 
  <key>Test1</key> 
  <false/> 
  <key>Key2</key> 
  <string>Value2</string> 
  <key>Key3</key> 
  <string>value3</string> 
 </dict> 
</dict> 
</plist> 

Спасибо!

4b9b3361

Ответ 1

См. Сериализация списка свойств

NSData* plistData = [source dataUsingEncoding:NSUTF8StringEncoding];
NSString *error;
NSPropertyListFormat format;
NSDictionary* plist = [NSPropertyListSerialization propertyListWithData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
NSLog( @"plist is %@", plist );
if(!plist){
    NSLog(@"Error: %@",error);
    [error release];
}

Ответ 2

Попробуйте следующее:

NSData * data = [yourString dataUsingEncoding:NSUTF8StringEncoding];

NSString *errorDesc = nil;
NSPropertyListFormat format;
NSDictionary * dict = (NSDictionary*)[NSPropertyListSerialization
                                      propertyListFromData:data
                                      mutabilityOption:NSPropertyListMutableContainersAndLeaves
                                      format:&format
                                      errorDescription:&errorDesc];

Ответ 3

Я попытался преобразовать его NSData, а затем в NSDictionary с NSPropertyListSerialization, но она возвращает "[NSCFString objectAtIndex]: непризнанные селектор направлен например 0x100539f40" при попытке получить доступ к NSDictionary, показывая, что мой словарь не был успешно создан.

Нет, это ничего не показывает. Он показывает, что вы пытались обрабатывать строку как массив. Вам нужно определить, где в plist вы пытались получить массив, и почему была строка, в которой вы ожидали массив, т.е. Неправильно ли вы создали plist (помещая в него строку, где вы хотели бы разместить массив ) или изучают его неправильно (наличие строки правильное, ваше последующее ожидание массива неверно).