gpt4 book ai didi

ios - 数据值为 nil 时 NSKeyedUnarchiver.unarchiveTopLevelObjectWithData 崩溃

转载 作者:行者123 更新时间:2023-11-28 13:41:54 24 4
gpt4 key购买 nike

我正在使用 Xcode 10.2.1、iOS 12.1+、Swift 5

下面的函数应该读取一个归档值并返回它。您可以看到以前的代码 (unarchiveObject) 在被弃用之前一直有效。

只要“数据”的返回值不为零,代码就可以工作——这意味着之前已经保存了一个值。但是,在新安装的应用程序中,由于之前未保存该值,因此会崩溃。

Fatal error: Unexpectedly found nil while unwrapping an Optional value

既然我不想预加载值,那么写这个函数的正确方法是什么才不会崩溃?

(似乎 NSKeyedUnarchiver.unarchiveTopLevelObjectWithData 现在也已被 iOS 12+ 弃用。正确的替代方法是什么?)

func color(forKey defaultName: String) -> UIColor? {
var color: UIColor?
// Working code prior to Swift 5 and iOS 12
// if let colorData = data(forKey: defaultName) {
// color = NSKeyedUnarchiver.unarchiveObject(with: colorData) as? UIColor
// }

// Works unless NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data(forKey: defaultName)!) returns nil
do {
if let colorData = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data(forKey: defaultName)!) as? UIColor {
color = colorData
}
} catch {
//print("Couldn't read file.")
}
return color
}

最佳答案

首先,对于这种情况,unarchiveObject(with:) 的替换是 unarchivedObject(ofClass:from:) .

其次,就像在 Swift 5 和 iOS 12 之前的工作代码 中那样执行相同的可选绑定(bind):

func color(forKey defaultName: String) -> UIColor? {
guard let colorData = data(forKey: defaultName) else { return nil }
return try? NSKeyedUnarchiver.unarchivedObject(ofClass: UIColor.self, from: colorData)
}

关于ios - 数据值为 nil 时 NSKeyedUnarchiver.unarchiveTopLevelObjectWithData 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55907826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com