我有两个方法,一个用于解归档根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)
应该可以。如果没有,您将不得不继续使用已弃用的方法;但我认为会的。