将 Plist (NSString) 解析为 NSDictionary

问题描述 投票:0回答:3

所以我有一个 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> 

谢谢!

objective-c xml cocoa parsing plist
3个回答
75
投票

请参阅 序列化属性列表(web.archive.org 链接)

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

13
投票

试试这个:

NSData * data = [yourString dataUsingEncoding:NSUTF8StringEncoding];

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

1
投票

我尝试将其转换为 NSData,然后使用 NSPropertyListSerialization 转换为 NSDictionary,但当我尝试访问 NSDictionary 时,它返回“[NSCFString objectAtIndex:]: 无法识别的选择器发送到实例 0x100539f40”,表明我的字典未成功创建。

不,它表明没有这样的事情。它表明您尝试将字符串视为数组。您需要确定您试图在 plist 中的哪个位置获取数组,以及为什么在您期望数组的位置有一个字符串,即您是否错误地创建了 plist(putting 一个字符串到您想要放置的位置)一个数组)或错误地检查它(字符串的存在是正确的;您随后对数组的期望是错误的)。

© www.soinside.com 2019 - 2024. All rights reserved.