我正在尝试制作一个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中读取值吗?
答案 0 :(得分:1)
尝试使用
var plistPath = NSBundle.mainBundle().pathForResource("Settings", ofType: "plist");
而不是
let plistPath = NSBundle.mainBundle().pathForResource("Settings", ofType: "plist");
这解决了我的问题。