【发布时间】:2020-10-08 04:52:51
【问题描述】:
根据 Vadian 的回答 How to NSKeyedUnarchiver.unarchiveObject 将弃用的 NSKeyedUnarchiver.unarchiveObject 转换为在 Swift 5/iOS 12+ 中工作
我设法将存档部分转换为工作,但我仍然无法修复未存档部分,这是我的代码:
override func viewDidDisappear(_ animated: Bool)
{
super.viewDidDisappear(animated)
guard let packs = MGLOfflineStorage.shared.packs else { return }
for pack in packs
{
do
{
let userInfo = try? NSKeyedUnarchiver.unarchiveObject(ofClasses: [NSObject.self], from: pack.context) as? [String: String]
print("Suspending download of offline pack: “\(userInfo["name"] ?? "unknown")”")
}
catch
{
print("viewDidDisappear: KeyedUnarchiver Error")
}
pack.suspend()
}
}
这给了我一个错误:
无法使用类型为“(ofClasses: [NSObject.Type], from: Data)”的参数列表调用“unarchiveObject”
这是原来的 iOS 12- 代码:
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// When leaving this view controller, suspend offline downloads.
guard let packs = MGLOfflineStorage.shared.packs else { return }
for pack in packs {
if let userInfo = NSKeyedUnarchiver.unarchiveObject(with: pack.context) as? [String: String] {
print("Suspending download of offline pack: “\(userInfo["name"] ?? "unknown")”")
}
pack.suspend()
}
}
【问题讨论】:
-
NSObject是一个抽象的 Objective-C 基类。你必须更具体。显然context包含一个[String:String]字典,所以至少使用NSDictionary。 -
谢谢 vadian,我对这个有点不熟悉,我试过了,但仍然得到同样的错误。你能告诉我在这种情况下你将如何解决它。
标签: swift mapbox nskeyedarchiver nskeyedunarchiver mapbox-ios