XCode升级,ios 8.1,spritekit和swift,对象构建'NSData(contentsOfFile:options:error :)'后出错'
问题描述:
我有一个工作的游戏,我运行,编译并上传到iTunes连接。但在更新XCode并试图用目标ios 8.1(不是8.0)编译我的游戏之后。我有这个错误。XCode升级,ios 8.1,spritekit和swift,对象构建'NSData(contentsOfFile:options:error :)'后出错'
extension SKNode {
class func unarchiveFromFile(file : NSString) -> SKNode? {
let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks")
// ERROR:
// 'dataWithContentsOfFile(_:options:error:)' is unavailable: use object construction 'NSData(contentsOfFile:options:error:)'
var sceneData = NSData.dataWithContentsOfFile(path!, options: .DataReadingMappedIfSafe, error: nil)
var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene
archiver.finishDecoding()
return scene
}
}
我还没有触及unarchiveFromFile方法在这里,并从搜索谷歌我找不到任何人有同样的问题。真的迷失在这里。
编辑: 更新代码到这个(评论后)
extension SKNode {
class func unarchiveFromFile(file : NSString) -> SKNode? {
let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks")
var sceneData = NSData.dataWithContentsOfFile(path!, options: .DataReadingMappedIfSafe, error: nil)
var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene
archiver.finishDecoding()
return scene
}
}
现在它编译和运行,但随后崩溃假定制作!
我只得到这样的:
dyld`dyld_fatal_error:
0x1fe1e08c: trap
0x1fe1e090: nop
答
你可以试试:
extension SKNode {
class func unarchiveFromFile(file : NSString) -> SKNode? {
if let path = NSBundle.mainBundle().pathForResource(file as String, ofType: "sks") {
var sceneData = NSData()
do {
try sceneData = NSData(contentsOfFile: path, options:NSDataReadingOptions.DataReadingMappedIfSafe)
} catch {
abort()
}
let archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameScene
archiver.finishDecoding()
return scene
} else {
return nil
}
}
其实编译器会告诉你用什么:'NSData的(contentsOfFile:路径!选择:.DataReadingMappedIfSafe,错误:无)' – 2014-11-01 20:44:41
谢谢,补充说它编译。但这只是导致另一次崩溃,这次没有错误信息.. – ganjan 2014-11-02 13:05:59
可能相关:https://stackoverflow.com/questions/26836102/crash-on-instantiating-sklabelnode-swift-ios-8-1 – 2014-11-10 04:27:05