首页 > 解决方案 > 无法在 AR 多用户中使用 NSKeyedUnarchiver 取消归档自定义对象

问题描述

我正在使用在 multiuserMultipeerConnectivity中共享位置。 当我归档(使用) 和取消归档(使用) 时 ,一切正常,但现在我正在尝试发送这样的自定义对象:SCNNodesAR session

NSKeyedArchiver.archivedData(withRootObject: someARNode, requiringSecureCoding: true)

if let node = try NSKeyedUnarchiver.unarchivedObject(ofClass:SCNNode.self, from: data) {

struct ARUser: Codable {
    var idUser : String
    var position: [Double]
}

当我尝试取消归档收到的对象时,NSKeyedUnarchiver.unarchivedObject它让我出错。

if let node = try NSKeyedUnarchiver.unarchivedObject(ofClass:ARUser.self, from: data) {...}

我收到语法错误:Incorrect argument label in call (have 'ofClass:from:', expected 'ofClasses:from:')
但是如果我按照编译器的建议更改函数:

 if let node = try NSKeyedUnarchiver.unarchivedObject(ofClasses:[ARUser.self], from: data) {..}

我得到下一个语法错误:Cannot convert value of type 'ARUser.Type' to expected element type 'AnyObject.Type'

所以,这里的问题是,取消归档自定义对象的正确方法是什么?

标签: swiftarkitmultipeer-connectivitymcsession

解决方案


既然你在这里使用Codable

struct ARUser: Codable {

然后

do {
   let dataToObject = try JSONDecoder().decode(ARUser.self,from:data)
   let objectToData = try JSONEncoder().encode(dataToObject)
}
catch { 
   print(error)
}

NSKeyedUnarchiver是一个古老的Objective-C东西


推荐阅读