02 июл. 2009 г., 05:24 отchristo16

Разбор 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> 

Спасибо!

Ответы на вопрос(0)

20 янв. 2012 г., 06:39 отPeter Hosey

I've tried converting it NSData and then to a NSDictionary with NSPropertyListSerialization, but it returns "[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x100539f40" when I attempt to access the NSDictionary, showing that my Dictionary was not successfully created.

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

02 июл. 2009 г., 05:36 отMarco Mustapic

Попробуй это:

NSData * data = [yourString dataUsingEncoding:NSUTF8StringEncoding];

NSString *errorDesc = nil;
NSPropertyListFormat format;
NSDictionary * dict = (NSDictionary*)[NSPropertyListSerialization
                                      propertyListFromData:data
                                      mutabilityOption:NSPropertyListMutableContainersAndLeaves
                                      format:&format
                                      errorDescription:&errorDesc];
22 июн. 2016 г., 18:16 отsplicerPeter N Lewis

УвидетьСериализация списка свойств

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];
}

ВАШ ОТВЕТ НА ВОПРОС