首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >archivedObject(ofClass:from:)对待[ SCNNode ]与SCNNode不同

archivedObject(ofClass:from:)对待[ SCNNode ]与SCNNode不同
EN

Stack Overflow用户
提问于 2021-10-11 00:04:32
回答 1查看 82关注 0票数 0

我有两种方法,一种是解压缩根SCNNode,另一种是解压缩根SCNNode的数组(在一个文件中)。

代码语言:javascript
复制
guard let component = try? NSKeyedUnarchiver.unarchivedObject(ofClass: SCNNode.self, from: moleData)
    else {
        component = failNode
        return component    // return to moleFunc to abort?
    }

但是,当我试图检索一个节点数组时,它不起作用:

代码语言:javascript
复制
 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,但操作无法提取一个可用的节点数组:

代码语言:javascript
复制
    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实现的要点是:

代码语言:javascript
复制
components = (NSKeyedUnarchiver.unarchiveObject(withFile: filePath) as? [SCNNode])!

节点文件都以plist的形式驻留在包中。

我不知道如何使数组版本“符合”,而单个SCNNode做得很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-11 15:30:02

解码SCNNode数组的现代方法是:

代码语言:javascript
复制
let components = try? NSKeyedUnarchiver.unarchivedArrayOfObjects(ofClass: SCNNode.self, from: moleData)

那应该管用。如果没有,您将不得不继续使用不推荐的方法;但我认为它会的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69519826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档