Objc运行时读取和写入plist文件遇到的问题
2015-12-12 21:35
246 查看
下面是本猫保持游戏NPC和物件交互的plist文件:
随着游戏和玩家逐步发生互动,玩家会修改人物和物件的交互的状态.这也是RPG游戏最基本的功能.
在切换每个地图时需要将上一个地图发生的改变存储到plist文件中去.
我采用的方法为现将plist文件读入结构对象中,然后修改之,再写会plist文件中.
读入的代码如下:
但是在修改mapInfoMDict中的某个子结构时,却发生错误:
意思是在一个不可变的对象上调用可变方法.
原因是虽然上面用了mutbaleCopy,但是这是浅拷贝,只有第一层的对象是可以修改的.正确的代码如下:
而写入plist文件的代码也比较简单,如下:
注意以上代码并不会修改Xcode中的plist文件,但的确会修改iOS模拟器中App中包含的plist文件,如果发现Xcode中的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文件遇到的问题
- powerdesigner奇淫技
- CSS.DIV网页样式与布局学习总结
- 单机搭建基于Hadoop的Spark环境
- 输入两数相乘-经典递归
- cftool的应用
- 循环相关函数range、enumerate、zip
- 论学习的重要性
- POJ-3100
- "compileDebugJavaWithJavac"错误解决
- Cocos2D-Android-1之源码详解:16.ParticleTest
- 适配器模式(Adapter)和外观模式(Facade)
- Serializable和Parcelable
- 算法学习:归并排序
- 整个社会都缺乏诚信,老实人很难过
- C语言隐藏控制台窗口
- 算法分析
- GTW likes math(BC 1001)
- 四个好看的CSS样式表格
- 【JavaScript】(6)——JavaScript与XPath、JSON交互