1

我像这样保存一个 NSDictionary:

 NSDictionary *menuList = [[NSDictionary alloc]initWithDictionary:xmlParser.items];
 NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
 NSString *directory = [paths objectAtIndex:0];
 NSString *fileName = [NSString stringWithUTF8String:MENU_LIST_NAME];
 NSString *filePath = [directory stringByAppendingPathComponent: fileName];
 [menuList writeToFile:filePath atomically:YES]

在此处输入图像描述

正如所见,字典充满了数据,应该是这样。

我从这样的文件中读取:

NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithUTF8String:MENU_LIST_NAME];
NSString *filePath = [directory stringByAppendingPathComponent:fileName];
NSDictionary *theMenu = [[NSDictionary alloc] initWithContentsOfFile:filePath];

但是在这里我只得到空对象:

在此处输入图像描述

我只是找不到解决方案。请帮忙。谢谢你。编辑:文件内容(似乎写得正确)

<dict>
<key>left</key>
<array>
    <dict>
        <key>id</key>
        <string>1</string>
        <key>level</key>
        <string>1</string>
        <key>link</key>
        <string>
        LoginActivity</string>
        <key>linkType</key>
        <string>internal</string>
        <key>state</key>
        <string>ANY</string>
        <key>title</key>
        <string>


        Login</string>
        <key>visible</key>
        <true/>
    </dict>
            etc....
4

5 回答 5

3

您的文件似乎不是正确的 plist。从文档中:

initWithContentsOfFile:使用在给定路径的文件中找到的键和值初始化新分配的字典。

由路径标识的文件中的字典表示必须仅包含属性列表对象(NSString、NSData、NSDate、NSNumber、NSArray 或 NSDictionary 对象)。有关更多详细信息,请参阅属性列表编程指南。这个字典包含的对象是不可变的,即使字典是可变的。

于 2013-08-21T15:18:48.130 回答
1

试试命令行

plutil path-to-your-file

也许它会告诉你文件有问题。

于 2013-08-21T18:45:17.623 回答
1

我认为问题可能在于您不是将值复制到这个新字典而是指针,因此在尝试检索内容时,引用会丢失。尝试使用 NSDictionary *menuList = [NSDictionary dictionaryWithDictionary: xmlParser.items;并确保xmlParser 上的项目被声明为(非原子,保留)属性。

于 2013-08-21T18:57:46.057 回答
1

对象不是空的。Xcode 调试器只是以某种方式显示它们为空。如果有人遇到同样的问题,请考虑这一点,它可能会为您节省大量时间。

于 2013-08-22T07:19:14.383 回答
-1

我使用 initWithContentsOfFile 从 /Library/Preferences 读取 plist 时遇到了类似的问题 - 目标的捆绑标识符与 plist 中的反向域名不匹配也可能导致 nil 返回。

于 2016-02-05T16:24:27.637 回答