在为其写入值后获取plist数据时出错

时间:2014-06-27 08:06:16

标签: ios nsdictionary swift exc-bad-instruction

我正在尝试制作一个plist文件,以便在SKScene和设置视图控制器之间共享数据。 由于我允许用户在游戏过程中随时访问设置,如果用户进行了任何更改,我总是从比赛开始游戏的plist文件中获取数据。

func startGame() {
    gameStarted = true;

    plistPath = NSBundle.mainBundle().pathForResource("Settings", ofType: "plist");
    dict = NSMutableDictionary(contentsOfFile: plistPath);

    let speed: CGFloat = dict.valueForKey("Speed") as CGFloat;

}

如果用户没有进入设置以完全更改设置,我可以在没有中断和错误的情况下运行此功能。
但是,一旦我在设置视图控制器中更改了速度值,并且一旦调用此函数,plistPath = NSBundle.mainBundle().pathForResource("Settings", ofType: "plist");始终会抛出EXC_BAD_INSTRUCTION错误。

这就是我如何改变plist的价值

let plistPath = NSBundle.mainBundle().pathForResource("Settings", ofType: "plist");
var dict: NSMutableDictionary = NSMutableDictionary(contentsOfFile: plistPath);

dict = NSMutableDictionary(dict.setValue(speed, forKey: "Speed"));
dict.writeToFile(plistPath, atomically: true);

编辑:我注意到问题来自这一行let speed: CGFloat = dict.valueForKey("Speed") as CGFloat;似乎一旦我删除它就不会抛出任何错误,但我需要它来从plist中读取值吗?

1 个答案:

答案 0 :(得分:1)

尝试使用

var plistPath = NSBundle.mainBundle().pathForResource("Settings", ofType: "plist");

而不是

let plistPath = NSBundle.mainBundle().pathForResource("Settings", ofType: "plist");
这解决了我的问题。