archivedObject(ofClass:from:)将[SCNNode]与SCNNode区别对待



我有两个方法,一个用于解归档根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'

下面的表单将正常运行,但操作无法提取可用的节点数组:

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
}

在else中,print打印为";[]&",调试器显示零元素。

Swift 3实现中最突出的一行是:

components = (NSKeyedUnarchiver.unarchiveObject(withFile: filePath) as? [SCNNode])!

节点文件都以plist的形式存在于Bundle中。

我不知道如何使数组版本"符合";而单个SCNNode就可以了。

解码SCNNode数组的现代方法是输入

let components = try? NSKeyedUnarchiver.unarchivedArrayOfObjects(ofClass: SCNNode.self, from: moleData)

应该可以。如果没有,您将不得不继续使用已弃用的方法;但我认为会的。

相关内容

  • 没有找到相关文章

最新更新