swift - 无法在 AR 多用户中使用 NSKeyedUnarchiver 取消归档自定义对象
问题描述
我正在使用在 multiuserMultipeerConnectivity
中共享位置。
当我归档(使用)
和取消归档(使用)
时
,一切正常,但现在我正在尝试发送这样的自定义对象:SCNNodes
AR 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'
所以,这里的问题是,取消归档自定义对象的正确方法是什么?
解决方案
既然你在这里使用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东西
推荐阅读
- r - 自定义函数线性回归
- keras - keras reshape 中输入维度的错误
- odoo - Many2one 字段上的域
- angular - 导航到另一个页面时隐藏单击的按钮
- clojurescript - d3 JavaScript 到 ClojureScript 的翻译
- c# - 如何在 C# (visual studio 2013) 中使用 Crystal Report 8.5 将参数传递给存储过程?
- python - 每个子账户的boto3 EC2客户端
- git - 无法使用 VS Team Explorer(Bitbucket git)拉取/获取
- unity3d - 启动画面挥之不去
- javascript - 如何在laravel中插入数组字段