zoukankan      html  css  js  c++  java
  • 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文件内容没有变化,不要感到奇怪啊!

  • 相关阅读:
    Ext表格控件
    Ext.data.Store的相关知识
    窗口对象及窗口分组
    sqlserver文件操作
    损益平衡点的计算方法(每天的营业额多少才能保证收支平衡)
    爬虫文件的下载
    flask get,post访问方式
    web的文件上传
    pythonj基础笔记
    我的总结(二)
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7089150.html
Copyright © 2011-2022 走看看