Swift编辑plist数组

时间:2014-12-11 20:11:04

标签: arrays swift plist

Hello简单明了我正在尝试读取一个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 个答案:

答案 0 :(得分:1)

如果没有更多详细信息(例如,您是否尝试运行调试程序?它显示了什么?),这是不可能确定的。但是这里有一个可能的情况:MyProperties.plist还没有存在于文档目录中。结果:

  1. data为零,因为path无法阅读。
  2. 您将文件复制到path,但这不会改变data
  3. 稍后您尝试将data写入path,但由于data为零,因此没有任何反应。
  4. 可能导致代码失败的其他因素可能会或可能不相关,具体取决于项目的其他内容:

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

    还有其他一些奇怪的事情发生 - 比如你创建myNewHighScore的方式,为它赋值,然后再对它做任何事情。是myNewHighScore应该在某个地方使用吗?