Я использую ARKit и GameKitMatches, поэтому я не могу использовать Codable (afaik), потому что MCPeerID
и ARWorldMap
не кодируются, чтобы сначала убрать это с пути.
Поэтому я использую NSCoding и NSSecureCoding, но по какой-то причине я всегда улавливаю ошибку:
The data couldn’t be read because it isn’t in the correct format.
... даже если я буквально только что создал ее.Я также пытался использовать NSKeyedUnarchiver.unarchivedObject(ofClasses: classes
, но это вызвало неожиданный ноль в моем инициате.
Вот игровая площадка, которую я сделал, показывая проблему:
class CodingData: NSObject, NSCoding, NSSecureCoding {
static var supportsSecureCoding = true
var dic: [String: Int]!
var i: Int!
func encode(with coder: NSCoder) {
coder.encode(i, forKey: "i")
coder.encode(dic, forKey: "dic")
}
required convenience init?(coder: NSCoder) {
let anInt = coder.decodeObject(forKey: "i") as! Int
let anDic = coder.decodeObject(forKey: "dic") as! [String: Int]
self.init(dic: anDic, i: anInt)
}
init(dic: [String: Int], i: Int){
self.dic = dic
self.i = i
}
}
do{
let test = CodingData(dic: [:], i: 0)
//let classes = [NSDictionary.self, NSNumber.self]
let testData = try NSKeyedArchiver.archivedData(withRootObject: test, requiringSecureCoding: true)
let emptyDic = try NSKeyedUnarchiver.unarchivedObject(ofClass: CodingData.self, from: testData)
// Error here ^^^^^^
}catch{
error.localizedDescription
}
Кстати, не уверен, если это имеет значениено при попытке отладки coder
в инициализации он всегда говорил (проб. просто ошибка):
error: <EXPR>:1:1: error: non-nominal type '$__lldb_context' (aka 'Self') cannot be extended
extension $__lldb_context {
^ ~~~~~~~~~~~~~~~
error: <EXPR>:19:27: error: value of type 'Self' has no member '$__lldb_wrapped_expr_28'
$__lldb_injected_self.$__lldb_wrapped_expr_28(
~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~