您的位置:首页 > 其它

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

2015-12-12 21:35 246 查看
下面是本猫保持游戏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文件内容没有变化,不要感到奇怪啊!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: