- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个有效但已弃用的工作代码:
这部分没问题:
let archived = try? NSKeyedArchiver.archivedData(withRootObject: [defaultRecord] as NSArray, requiringSecureCoding: false)
这是弃用的:
let records = NSKeyedUnarchiver.unarchiveObject(with: unarchivedObject as Data) as? [Record]
'unarchiveObject(with:)' was deprecated in iOS 12.0: Use +unarchivedObjectOfClass:fromData:error: instead
虽然听起来很简单,但我无法找到一种方法来使用建议的方法,而不会在我尝试的每个组合中出现错误。
有这方面的工作示例吗?
最佳答案
使用新的 API 来归档数组有点棘手。
如果您不使用 try?
忽略错误,您本可以自己弄清楚 😉
为了能够使用 unarchivedObject(ofClass:from:
解码自定义类的数组,您必须使用 plural 形式 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) }
但是为什么要将 defaultRecord
归档为数组呢?如果您存档单个对象,您可以保留您的类(class)并编写
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) }
旁注:考虑使用 Codable
序列化类。它更快捷并且不需要从 NSObject
继承。
关于swift - 如何 NSKeyedUnarchiver.unarchiveObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55982244/
我想将用户的过滤器选择保存在 FilterViewController 上。 当 FilterViewController 关闭时,NSKeyedArchiver.archiveRootObject
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
这个问题在这里已经有了答案: UIImage(contentsOfFile:) returning nil despite file existing in caches directory [du
我有一个有效但已弃用的工作代码: 这部分没问题: let archived = try? NSKeyedArchiver.archivedData(withRootObject: [defaultR
在 iOS 12.1 中,unarchiveObject(withFile:) 已被弃用。 如何将 NSKeyedUnarchiver.unarchiveObject(withFile: String
我一直在寻找这个问题的答案,但我找不到任何答案,类似的问题根本没有答案。基本上,我想使用 NSKeyedUnarchiver.archiveRootObject() 保存数据并使用 .unarchiv
我尝试将代码从 NSCoding 格式化为 Codable,旧版本使用 NSKeyedUnarchiver 取消存档。 // ItemStore.swift var allItems = [Item]
我正在尝试在 Today 小部件和主机应用程序之间传递自定义类。我正在为此使用 NSKeyArchiver/NSKeyUnarchiver 类。我的类(class)符合 NSCoding 协议(pro
我是一名优秀的程序员,十分优秀!