Разбор Plist (NSString) в NSDictionary
Итак, у меня есть структурированная строка plist, которая получается динамически (не из файловой системы). Как бы я преобразовать эту строку в NSDictionary.
Я попытался преобразовать его NSData, а затем в NSDictionary с NSPropertyListSerialization, но он возвращает "[NSCFString objectAtIndex:]: нераспознанный селектор, отправленный на экземпляр 0x100539f40", когда я пытаюсь получить доступ к NSDictionary, показывая, что мой словарь не был успешно создан.
Пример строки NSSt (это данные 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>
Спасибо!
3 ответа
См. Сериализация списка свойств
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];
}
Попробуй это:
NSData * data = [yourString dataUsingEncoding:NSUTF8StringEncoding];
NSString *errorDesc = nil;
NSPropertyListFormat format;
NSDictionary * dict = (NSDictionary*)[NSPropertyListSerialization
propertyListFromData:data
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:&format
errorDescription:&errorDesc];
Я попытался преобразовать его NSData, а затем в NSDictionary с NSPropertyListSerialization, но он возвращает "[NSCFString objectAtIndex:]: нераспознанный селектор, отправленный на экземпляр 0x100539f40", когда я пытаюсь получить доступ к NSDictionary, показывая, что мой словарь не был успешно создан.
Нет, это не показывает ничего подобного. Это показывает, что вы пытались рассматривать строку как массив. Вам нужно будет определить, где в plist вы пытались получить массив и почему там была строка, где вы ожидали массив - то есть, правильно ли вы создали plist (поместив в него строку там, где вы хотели поместить массив) или проверяют его неправильно (наличие строки верно; ваше последующее ожидание массива неверно).