swift - Spritekit 场景归档

标签 swift sprite-kit nskeyedarchiver

SpriteKit programming guide包含这个有用的小花絮:

Store a game level as an archive of a scene node. This archive includes the scene, all of its descendants in the node tree, and all of their connected physics bodies, joints, and actions.

但它没有任何关于在哪里或如何存储这个文件的信息。这是我当前的代码,但它不起作用:

    // Save Data
    let fileManager = FileManager.default
    let URL = fileManager.urls(for: .applicationSupportDirectory, in: .userDomainMask)[0]
    let path = URL.appendingPathComponent("stage1.dat")

    if NSKeyedArchiver.archiveRootObject(stage1, toFile: path.path) != false {
        print("stage saved")
    }
    else {
        print("save failed")
    }

    // Load Data
    var data = Data()
    do{
        data = try Data(contentsOf: path)
    }
    catch{
        print(error)
    }


    let stage = NSKeyedUnarchiver.unarchiveObject(with: data) as? GameScene

编辑:原来我没有写入本地域的权限。哎呀。 我将其切换到用户域,现在写入工作正常。但是,尝试取消归档同一个文件现在会抛出 NSException。我将取消存档代码添加到上面的 block 中。

最佳答案

我最终使用 unarchiveTopLevelObjectWithData 来生成一个我可以捕获的错误。

原来 NSexception 是由于尝试使用不是解码对象的东西来解码可选的。

This question pretty much sums it up.

关于swift - Spritekit 场景归档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41387184/

相关文章:

swift - 我怎样才能改变我的程序,让这个对象只对一次触摸使用react?

ios - SpriteKit 中的瓷砖游戏 map 存储

objective-c - NSKeyedArchiver:如何归档包含自定义结构的 NSValue

iOS: append 到文件

objective-c - 无论对象类型如何,NSKeyedArchiver 都会序列化整个对象层次结构吗?

ios - 具有计算返回值的单元测试展开 segue

ios - UISlider 不更新 Swift 中的当前值

ios - 在 Swift 中将数组传递给通用数据源

javascript - 如何从 Javascript 中的 POST 请求读取 JSON 值

ios - Xcode 粒子发射器编辑器不使用 ~ipad 图像?