Spr*_*ing 12 nskeyedunarchiver swift ios12
我有一个有效但已弃用的工作代码:
这部分很好:
let archived = try? NSKeyedArchiver.archivedData(withRootObject: [defaultRecord] as NSArray, requiringSecureCoding: false)
Run Code Online (Sandbox Code Playgroud)
这是已弃用的:
let records = NSKeyedUnarchiver.unarchiveObject(with: unarchivedObject as Data) as? [Record]
Run Code Online (Sandbox Code Playgroud)
'unarchiveObject(with:)' 在 iOS 12.0 中被弃用:使用 +unarchivedObjectOfClass:fromData:error: 代替
听起来很简单,但我无法找到一种方法来使用建议的方法而不会在我尝试的每个组合中都出错。
任何工作示例?
vad*_*ian 15
使用新 API 来归档数组有点棘手。
如果您不忽略错误,您可以自己弄清楚 try?
为了能够解码自定义类的数组,unarchivedObject(ofClass:from:您必须使用复数形式unarchivedObject(ofClasses:from:并指定NSArray(!) 和自定义类。此外,您的班级必须采用NSSecureCoding
class Record : NSObject, NSSecureCoding {
static var supportsSecureCoding: Bool {
return true
}
....
do {
let archived = try NSKeyedArchiver.archivedData(withRootObject: [defaultRecord], requiringSecureCoding: false)
let records = try NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, Record.self], from: archived) as! [Record]
print(records)
} catch { print(error) }
Run Code Online (Sandbox Code Playgroud)
但是为什么要存档defaultRecord为数组呢?如果您归档单个对象,您可以保留您的班级并编写
do {
let archived = try NSKeyedArchiver.archivedData(withRootObject: defaultRecord, requiringSecureCoding: false)
let record = try NSKeyedUnarchiver.unarchivedObject(ofClass: Record.self, from: archived)
let records = [record]
print(records)
} catch { print(error) }
Run Code Online (Sandbox Code Playgroud)
旁注:考虑使用Codable. 它更快,并且不需要从NSObject.
| 归档时间: |
|
| 查看次数: |
9580 次 |
| 最近记录: |