Spritekit场景归档

时间:2016-12-29 21:06:16

标签: swift sprite-kit nskeyedarchiver

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

  

将游戏关卡存储为场景节点的存档。此存档包括场景,节点树中的所有后代以及所有连接的物理实体,关节和操作。

但它没有关于存档此存档的位置或方式的任何信息。这是我目前的代码,虽然它不起作用:

    // 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。我将unarchiving代码添加到上面的块中。

1 个答案:

答案 0 :(得分:1)

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

结果证明NSexception是由于尝试使用不是解码对象的东西来解码可选项。

This question pretty much sums it up.