无法在 AR Multiuser 中使用 NSKeyedUnarchiver 取消存档自定义对象
Can't unarchive custom Object with NSKeyedUnarchiver in AR Multiuser
我正在使用 MultipeerConnectivity
在多用户 AR session
中共享 SCNNodes
位置。
当我存档时(使用 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'
所以,这里的问题是,取消归档自定义对象的正确方法是什么?
因为你在这里使用 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 东西
我正在使用 MultipeerConnectivity
在多用户 AR session
中共享 SCNNodes
位置。
当我存档时(使用 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'
所以,这里的问题是,取消归档自定义对象的正确方法是什么?
因为你在这里使用 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 东西