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文件内容没有变化,不要感到奇怪啊!

时间: 2015-12-12

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

《数据科学:R语言实现》——2.3 读取和写入CSV文件

2.3 读取和写入CSV文件 在之前的教程中,我们从雅虎财经下载了标普500历史价格数据.现在我们可以读取数据,并加载到R进程中,以备后续查看和操作.在本教程中,我们会介绍如何使用R函数读取文件. 准备工作 在本教程中,你需要完成之前的教程,并把标普500历史价格文本文件下载到当前目录. 实现步骤 执行下列步骤,从CSV文件中读取文本数据. 1.首先,使用getwd确定当前目录,使用list.files查看文件的位置: 2.然后,使用函数read.table指定逗号为分隔符,读取数据: 3.接着

类名写入plist文件,动态引入类

   把类名写入plist文件,动态引入类   NSString *classNameKey = [moduleData objectForKey:@"class"];          NSDictionary *moduleDic = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Module" ofType:@"plist&quo

《OpenCV图像处理》——1.6 读取和写入视频文件

1.6 读取和写入视频文件 视频处理的是运动图像,而不是静止图像.视频资源可以是一个专用摄像机.网络摄像头.视频文件或图像文件序列.在OpenCV中,VideoCapture类和VideoWriter类为视频处理中所涉及的捕获和记录任务提供了一个易用的C++ API. 1.?recVideo示例代码 recVideo示例是一个简短的代码片段,使您可以了解如何使用一个默认摄像机作为一个捕捉设备,来抓取帧,对它们进行边缘检测,并且将新的转换视频帧作为一个文件保存.而且,创建两个窗口同时显示原始帧和处

可否可以在窗口中添加图片控件,在运行时读取按指定配置文件内容,再向图片控件添加数据!

问题描述 大家过年好!小弟给大家拜年了!无聊想写一个象棋程序!有什么控件可以是圆形的,可以添加图片?或者让图片透明部分显示此控件下面的内容?请前辈们指点!谢谢了! 解决方案 解决方案二:如果你使用WPF/Silverlight,随便什么控件(比如说Image控件)都可以承载透明前景图片.透明背景图片.你不会还只是使用20年前的Winform技术吧?解决方案三:随便搜两个介绍:解决方案四:引用1楼sp1234的回复: 如果你使用WPF/Silverlight,随便什么控件(比如说Image控件)都

关于plist文件的那些事

 今天遇到新生问一个问题,就是用自己定义了一个plist文件,然后可以往里面写东西,但是写过再次运行的时候里面的数据总是最后一次写入的数据.后来就专门研究了一下plist文件.     大家都知道当你创建一个项目的时候,在Supporting Files中会有一个Info.plist文件,这个文件中存储的信息如下:  它是整个APP的配置文件,包括了版本信息以及APP桌面显示名称等信息.可能是我还不太了解,但是经过我测试发现我无法用代码对Info.plist这个文件进行操作.     先把pli

iOS学习之 plist文件的读写

  在做iOS开发时,经常用到到plist文件,  那plist文件是什么呢? 它全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件.属性列表文件的扩展名为.plist ,因此通常被称为 plist文件.文件是xml格式的. Plist文件通常用于储存用户设置,也可以用于存储捆绑的信息 我们创建一个项目来学习plist文件的读写. 1.创建项目Plistdemo 项目创建之后可以找到项目对应的plist文件,打开如下图所示: 在编辑器中显示类似与表格的形式,可

苹果ios开发中的plist文件的读写的例子

前言:在做iOS开发时,经常用到plist文件,  那么,plist文件究竟是什么呢? 在此,我做一个简单的介绍和使用,它全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件.属性列表文件的扩展名为.plist ,因此通常被称为 plist文件,文件是xml格式. Plist文件通常用于储存用户设置,也可以用于存储捆绑的信息,同时也可以用来存储其他的信息. 下面,我将创建一个项目来学习plist文件的读写. 1.创建项目demo 项目创建之后可以找到项目对应的p

ASP.NET HTTP运行时组成详解

asp.net|详解 简介 不管使用哪种底层平台可靠性和性能都是对所有 Web 应用程序的主要要求尽管从某种意义上讲这两个要求是相互矛盾的.例如要构建更可靠.更健壮的应用程序可能需要将 Web 服务器与具体的应用程序分离使应用程序在进程外工作.但是如果在不同于 Web 服务器进程的内存环境中工作应用程序将变慢.因此需要采取合理的措施以确保进程外代码尽可能快地运行. 在构建 Microsoft? ASP.NET 运行时环境时依据的设计原则即充分考虑可靠性和性能.得到的 ASP.NET 进程模型包含

Windows Phone 8初学者开发—第14部分:在运行时绑定到真实的数据

原文 Windows Phone 8初学者开发-第14部分:在运行时绑定到真实的数据 第14部分:在运行时绑定到真实的数据 原文地址:  http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-14-Binding-to-Real-Data-at-Runtime 系列地址:http://channel9.msdn.com/Series/Windows-Phone-8-Devel