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

相关文章
|
弹性计算 移动开发 安全
阿里云域名注册、续费收费标准价格表及最新优惠口令获取及使用教程参考
阿里云域名注册和续费收费标准在9月份随着全球域名价格的上涨,域名收费标准也做了调整,目前阿里云的.com英文域名的注册价格为83元,续费收费标准为90元,为了让更多用户在注册和续费时价格能更加实惠,阿里云推出了域名优惠口令活动,域名优惠口令适合在域名注册和续费时使用,使用优惠口令通常可以使注册和续费价格减免几元到十几元不等,例如使用优惠口令续费.com域名就可减少5元。本文为大家展示目前阿里云域名注册和续费的最新收费标准以及如何领取和使用域名优惠口令的相关教程,以供参考。
2831 11
|
机器学习/深度学习 人工智能 算法
打造你的超级Agent智能体——在虚拟迷宫中智斗未知,解锁AI进化之谜的惊心动魄之旅!
【10月更文挑战第5天】本文介绍了一个基于强化学习的Agent智能体项目实战,通过控制Agent在迷宫环境中找到出口来完成特定任务。文章详细描述了环境定义、Agent行为及Q-learning算法的实现。使用Python和OpenAI Gym框架搭建迷宫环境,并通过训练得到的Q-table测试Agent表现。此项目展示了构建智能体的基本要素,适合初学者理解Agent概念及其实现方法。
520 9
|
机器学习/深度学习 算法 安全
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-2
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-2
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-2
|
存储 弹性计算 人工智能
阿里云99计划2核2G服务器99元/年,新购续费均可用
阿里云服务器99元一年配置为云服务器ECS经济型e实例,2核2G配置、3M固定带宽和40G ESSD Entry系统盘,新用户和老用户均可买
|
前端开发 关系型数据库 MySQL
技术好文:R基础学习(三)
技术好文:R基础学习(三)
96 0
|
虚拟化 数据中心 Docker
8.Docker相关概念
8.Docker相关概念
|
存储 分布式数据库 数据库
2.0解析系列 | OceanBase 2.0 之 索引实时生效
OB君:本文是 “OceanBase 2.0 技术解析系列” 的第七篇文章。今天我们来聊聊数据的持续可用,说说2.0的索引实时生效功能。更多精彩欢迎关注OceanBase公众号持续订阅本系列内容!
|
存储 SQL 缓存
Mysql专栏 - Linux底层交互和Raid存储架构
​ 在专栏之前的几篇文章中,我们总结了缓冲池,缓存页,redo log,undo log,以及数据页和数据行在底层是如何进行存储的,后续介绍了表空间,段,区等概念。这一节比较特殊,讲述的是和Linux有关的交互原理,因为多数的mysql都是部署在linux的服务器上面,本节会简单介绍一下linux是如何处理mysql的请求的,以及linux系统会带来哪些问题
268 0
Mysql专栏 - Linux底层交互和Raid存储架构
|
Swift iOS开发
iOS 13 之后自定义 Window 不显示解决 (SceneDelegate)
iOS 13 之后自定义 Window 不显示解决 (SceneDelegate)
596 0
|
JavaScript 前端开发
空值合并运算符和可选链
空值合并运算符和可选链
163 0