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'
我很确定第一个引起第二个。
如果有人能修复我的逻辑,我将非常感激。如果这只是一个试图实现目标的坏方法,我也会采取新的方式。
谢谢!
答案 0 :(得分:1)
如果没有更多详细信息(例如,您是否尝试运行调试程序?它显示了什么?),这是不可能确定的。但是这里有一个可能的情况:MyProperties.plist
还没有存在于文档目录中。结果:
data
为零,因为path
无法阅读。path
,但这不会改变data
。data
写入path
,但由于data
为零,因此没有任何反应。可能导致代码失败的其他因素可能会或可能不相关,具体取决于项目的其他内容:
MyProperties.plist
在应用套装中不存在,因此永远不会被复制。MyProperties.plist
存在,但其内容不是有效的NSDictionary
。MyProperties.plist
存在且有效NSDictionary
但不包含TiltHighScores
的值。seconds
小于或等于LevelHighScore
,因此您永远不会尝试将data
写入文件。还有其他一些奇怪的事情发生 - 比如你创建myNewHighScore
的方式,为它赋值,然后再对它做任何事情。是myNewHighScore
应该在某个地方使用吗?