从 plist 文件中读取字典的奇怪行为

Posted

技术标签:

【中文标题】从 plist 文件中读取字典的奇怪行为【英文标题】:Strange behavior reading Dictionary from a plist file 【发布时间】:2012-05-24 09:20:00 【问题描述】:

当我读取一个字典的 plist 时,该字典 非空 并且在我的模型类的 NSMutableDictionary 属性中至少有一个键值对,一切正常。 我可以添加,删除修改可变字典。

但是当字典为空

你可以看到带有这样标签的 plist:

<dict/>

然后,即使我的属性有一个 NSMutableDictionary 指针,创建的 Object 也变得不可变。

当我尝试在其中为特定属性设置对象时, 它给了我这个错误说:

'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'

【问题讨论】:

【参考方案1】:
NSMutableDictionary *mutable = [yourApparentlyMutableDictionary mutableCopy];

【讨论】:

myApparentlyMutableDictionary 是我需要修改的类属性。那么我应该将它加载到临时 mutableCopy 中更改副本并将其分配回来吗?如果是,我应该保持 mutableCopy 自动释放还是在完成后释放? 酷! Objective C 与一些更常见的语言有点不同,但是学习它很有趣!【参考方案2】:

很确定从 plist 中检索到的所有对象都是不可变的变体。我确实认为我看到了一个将它们反序列化为可变的选项。

编辑:

这篇文章解释了如何将 plist 取消归档为可变:

http://cocoadev.com/wiki/PropertyList

【讨论】:

以上是关于从 plist 文件中读取字典的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

在 plist 中写入字典有效,然后从 plist 返回中读取字典(空)

从 .plist 文件中读取

如何在 swift 中读取数组和字典的 plist

使用 Xcode 读取和写入具有字典数组的 Plist

用触动怎么读取plist的数组?

从 plist 字符串中读取 url 图像