首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XCode升级后出错,IOS8.1,spritekit和after,对象构造‘NSData(contentsOfFile:options: Error:)

XCode升级后出错,IOS8.1,spritekit和after,对象构造‘NSData(contentsOfFile:options: Error:)
EN

Stack Overflow用户
提问于 2014-11-01 20:39:40
回答 1查看 2.6K关注 0票数 3

我有一个工作游戏,我运行,编译和上传到ITunes连接。但是在更新了XCode并试图用目标ios 8.1 (而不是8.0)编译我的游戏之后。我犯了这个错误。

代码语言:javascript
复制
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方法,通过搜索google,我找不到有同样问题的人。在这里真的迷路了。

编辑:将代码更新为以下内容(在注释之后)

代码语言:javascript
复制
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
    }
}

现在它编译并运行,但随后模拟崩溃!

我只知道这个:

代码语言:javascript
复制
dyld`dyld_fatal_error:
0x1fe1e08c:  trap   
0x1fe1e090:  nop     
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-23 23:14:45

你可以试试:

代码语言:javascript
复制
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
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26692995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档