Swift 编辑 plist 数组

Posted

技术标签:

【中文标题】Swift 编辑 plist 数组【英文标题】:Swift editing plist array 【发布时间】:2014-12-11 20:11:04 【问题描述】:

你好简单明了我正在尝试读取一个 plist 数组,编辑一个值,然后将其保存回来。 我尝试了很多不同的方法,但似乎无法完全弄清楚我做错了什么。

//These three lines are outside any function to make them global
var dict: NSDictionary!
var data: NSMutableDictionary!
var path: String!

    let seconds = Float(mytime)

    var HighScores = dict.valueForKey("TiltHighScores") as? NSArray
    var myHighScores:NSArray = HighScores!
    var fakeLevelHighScore = myHighScores[MyGame.level] as NSNumber
    var LevelHighScore = fakeLevelHighScore.floatValue
    println("\(LevelHighScore)")
    println("\(seconds)")

    myNewHighScore = myHighScores


    if (seconds>=LevelHighScore)
        println("its happening")
        myNewHighScore[MyGame.level] = NSNumber(double: Double(seconds))
        //error one on line above, error two on line below
        data.setObject(myNewHighScores, forKey: "TiltHighScores")
         data.writeToFile(path, atomically: true)
    

编辑: 抱歉,这个问题有多么含糊,这里有更多细节。我可以很好地从 plist 中读取。因此,阅读 plist 的路径和所有内容都是正确的。我在编辑和重新保存数组时遇到问题。我试图编辑的数组称为 TiltHighScores。我将其拉入变量 HighScores。为了打开它,我将 myHighScores 设置为 HighScores !标记。我执行相同的过程从数组中提取一个值以获得当前级别的高分。这一切都有效。从这里开始是我收到问题的地方。我想测试一下用户得分(秒)是否大于关卡的高分,如果是,我想保存新的高分。我尝试通过创建一个数组 (myNewHighscores) 并用原始高分值填充其值,然后更改一个值(级别值)并重新保存来做到这一点。

我现在在 if 语句中收到两个错误。请参阅评论以获取确切的行 首先: 无法分配给此表达式的结果 第二: 使用未解析的标识符“myNewHighScores”

我很确定第一个导致第二个。

如果有人能修正我的逻辑,我将不胜感激。如果这只是尝试实现目标的一种糟糕方式,我也愿意接受一种新方式。

谢谢!

【问题讨论】:

【参考方案1】:

如果没有更多细节,就无法确定(例如,您是否尝试运行调试器?它显示了什么?)但可能的情况是:MyProperties.plist 不存在于文档目录中。结果:

    data 为 nil,因为在 path 处没有可阅读的内容。 您将文件复制到path,但这不会改变data。 稍后您尝试将data 写入path,但由于data 为nil,因此没有任何反应。

其他可能导致代码失败的事情可能相关也可能不相关,具体取决于您的项目的其他情况:

可能MyProperties.plist 不存在于应用程序包中,因此它永远不会被复制。 可能存在MyProperties.plist,但其内容不是有效的NSDictionary。 可能MyProperties.plist 存在并且是有效的NSDictionary,但不包含TiltHighScores 的值。 可能seconds 小于或等于LevelHighScore,因此您永远不要尝试将data 写入文件。

还有一些其他奇怪的事情正在发生——比如你创建myNewHighScore的方式,给它赋值,然后再不做任何事情。 myNewHighScore 应该在某处使用吗?

【讨论】:

感谢您的回复。我尝试清理并让我的代码在编辑中更具可读性。

以上是关于Swift 编辑 plist 数组的主要内容,如果未能解决你的问题,请参考以下文章

使用Plist编辑器——简单入门指南

使用Plist编辑器——简单入门指南

swift3.0怎么获取info.plist文件里的属性值

Swift:如何在 plist 的数组中读取多个数组?

无法使用 plist 填充数组

Swift 2:使用多维对象写入 plist