所以我有一个plist结构化字符串,它是动态获取的(不是来自文件系统)。我如何将此字符串转换为NSDictionary。
我已尝试将其转换为NSData,然后转换为带有NSPropertyListSerialization的NSDictionary,但当我尝试访问NSDictionary时,它返回“[NSCFString objectAtIndex:]:无法识别的选择器发送到实例0x100539f40”,显示我的词典未成功创建
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 :(得分:72)
请参阅Serializing a Property List
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];
}
答案 1 :(得分:12)
试试这个:
NSData * data = [yourString dataUsingEncoding:NSUTF8StringEncoding];
NSString *errorDesc = nil;
NSPropertyListFormat format;
NSDictionary * dict = (NSDictionary*)[NSPropertyListSerialization
propertyListFromData:data
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:&format
errorDescription:&errorDesc];
答案 2 :(得分:1)
我已尝试将其转换为NSData,然后转换为带有NSPropertyListSerialization的NSDictionary,但当我尝试访问NSDictionary时,它返回“[NSCFString objectAtIndex:]:无法识别的选择器发送到实例0x100539f40”,显示我的词典未成功创建
不,它没有显示这样的事情。它显示的是您尝试将字符串视为数组。您需要确定plist在哪里尝试获取数组以及为什么有一个字符串您希望数组 - 即,您是否错误地创建了plist(将字符串放入其中你打算放一个数组的地方)或者是不正确地检查它(字符串的存在是正确的;你后来对数组的期望是错误的。)