我有两种方法,一种是解压缩根SCNNode,另一种是解压缩根SCNNode的数组(在一个文件中)。
guard let component = try? NSKeyedUnarchiver.unarchivedObject(ofClass: SCNNode.self, from: moleData)
else {
component = failNode
return component // return to moleFunc to abort?
}但是,当我试图检索一个节点数组时,它不起作用:
guard let components = try? NSKeyedUnarchiver.unarchivedObject(ofClass: [SCNNode].self, from: moleData)
else {
components = []
return components // return to moleFunc to abort?
}在上面的两个错误中,unarchivedObject(ofClass:from:)有两个错误:静态方法'unarchivedObject(ofClass: from :)‘要求'SCNNode’符合'NSCoding‘,而静态方法’unarchivedObject‘(ofClass:from:)要求'SCNNode’继承于'NSObject‘。
下面的表单将运行OK,但操作无法提取一个可用的节点数组:
guard let components = try? (NSKeyedUnarchiver.unarchivedObject(ofClass: NSArray.self, from: moleData) as! [SCNNode])
else {
print("unarchivedObject(ofClass: FAIL, components = ", components)
components = []
return components // return to moleFunc to abort
}在“print”中,调试器输出为"",调试器将显示零个元素。
Swift 3实现的要点是:
components = (NSKeyedUnarchiver.unarchiveObject(withFile: filePath) as? [SCNNode])!节点文件都以plist的形式驻留在包中。
我不知道如何使数组版本“符合”,而单个SCNNode做得很好。
发布于 2021-10-11 15:30:02
解码SCNNode数组的现代方法是:
let components = try? NSKeyedUnarchiver.unarchivedArrayOfObjects(ofClass: SCNNode.self, from: moleData)那应该管用。如果没有,您将不得不继续使用不推荐的方法;但我认为它会的。
https://stackoverflow.com/questions/69519826
复制相似问题