Hey Quinn, thanks for all the material.
I realize that I have a basic issue in my code.
data is not loaded.
In the previous version, archiver had a connection to data
let archiver = NSKeyedArchiver(forWritingWith: data)
That's no more the case, so data is empty, hence the problems.
let data = NSMutableData()
let archiver = NSKeyedArchiver(requiringSecureCoding: true)
archiver.encode(myObject, forKey: theKey)
archiver.encode(myObject2, forKey: theKey2)
archiver.finishEncoding()
do {
try data.write(to: an uRL, options: []) // data is empty of course !
} catch {
}
So should I replace:
archiver.encode(myObject, forKey: theKey)
archiver.encode(myObject2, forKey: theKey2)
archiver.finishEncoding()
do {
try data.write(to: anURL, options: []) // So object and object2 are on file
with
let data = try! NSKeyedArchiver.archivedData(withRootObject: myObject, requiringSecureCoding: true)
let data2 = try! NSKeyedArchiver.archivedData(withRootObject: myObject2, requiringSecureCoding: true)
archiver.finishEncoding()
If so, how do I write object and object2 in a single file properly ? Would I have to include all in a single root class ?
Also, when I compare to https://developer.apple.com/forums/thread/759746,
my required init(coder decoder: NSCoder) is different.
required init(coder decoder: NSCoder) {
super.init()
var1 = decoder.decodeObject(forKey: key) as? [someType]
var2 = decoder.decodeObject(forKey: key2) as? [someType2]
}
I do not use decodeObject(of:) as in the reference
let identifier = decoder.decodeObject(of: NSString.self, forKey: "identifier"),
let codeDataModels = decoder.decodeArrayOfObjects(ofClass: CodeDataModel.self, forKey: "codeDataModels")
Is it OK ?