Objc执行时读取和写入plist文件遇到的问题

Posted zhchoutai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objc执行时读取和写入plist文件遇到的问题相关的知识,希望对你有一定的参考价值。

以下是本猫保持游戏NPC和物件交互的plist文件:

技术分享

随着游戏和玩家逐步发生互动,玩家会改动人物和物件的交互的状态.这也是RPG游戏最主要的功能.

技术分享

在切换每一个地图时须要将上一个地图发生的改变存储到plist文件里去.

我採用的方法为现将plist文件读入结构对象中,然后改动之,再写会plist文件里.

读入的代码例如以下:

NSMutableDictionary *mapInfoMDict = [[NSDictionary dictionaryWithContentsOfFile:fullPath] mutableCopy];

可是在改动mapInfoMDict中的某个子结构时,却错误发生:

*** Terminating app due to uncaught exception ‘NSInternalInconsistencyException‘, reason: ‘-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object‘

意思是在一个不可变的对象上调用可变方法.

原因是尽管上面用了mutbaleCopy,可是这是浅拷贝,仅仅有第一层的对象是能够改动的.正确的代码例如以下:

_mapInfoMDict = [NSMutableDictionary dictionaryWithContentsOfFile:fullPath];

而写入plist文件的代码也比較简单,例如以下:

[_mapInfoMDict writeToFile:fullPath atomically:YES];

注意以上代码并不会改动Xcode中的plist文件,但的确会改动ios模拟器中App中包括的plist文件,假设发现Xcode中的plist文件内容没有变化,不要感到奇怪啊!

以上是关于Objc执行时读取和写入plist文件遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

读取 plist 文件以填充表格时出错

读取和写入 NSMutableDictionary 到 plist 文件

读取/写入 plist 的正确方法是啥?

无法写入 plist 文件

在运行应用程序时将数据写入 plist 并将它们读取到 UITable

增量写入 plist 文件