archivedObject(ofClass:from:) 对待 [SCNNode] 的方式与 SCNNode 不同
archivedObject(ofClass:from:) treats [SCNNode] differently that 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)
应该可以。如果没有,您将不得不继续使用已弃用的方法;但我认为它会。
我有两种方法,一种取消存档根 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)
应该可以。如果没有,您将不得不继续使用已弃用的方法;但我认为它会。