【问题标题】:unarchiveObject(withFile) deprecated不推荐使用 unarchiveObject(withFile)
【发布时间】:2020-09-24 10:01:30
【问题描述】:

我一直在关注本教程:https://developer.apple.com/library/archive/referencelibrary/GettingStarted/DevelopiOSAppsSwift/PersistData.html,我知道它很旧,但一直运行良好。

但是,我现在收到有关 archiveRootObject(_:toFile:)unarchiveObject(withFile:) 的错误消息现已弃用。

我遵循了一个答案,我想我已经对 archiveRootObject 进行了排序,但不知道如何处理 unarchiveObject。

这是我更新的 archiveRootObject 代码:

do {
    let saveData = try NSKeyedArchiver.archivedData(withRootObject: meals, requiringSecureCoding: true)
    try saveData.write(to: Meal.ArchiveURL) }
catch { print(error) }

这是我原来的、现已弃用的非归档代码:

private func loadMeals() -> [Meal]? {

return NSKeyedUnarchiver.unarchiveObject(withFile: Meal.ArchiveURL.path) as? [Meal] }

提前致谢

【问题讨论】:

    标签: ios arrays swift deprecated nskeyedunarchiver


    【解决方案1】:

    在这种情况下,您的 Meal 类应该符合 NSSecureCoding 协议(而不是 NSCoding)和子类 NSObject

    class Meal: NSObject, NSSecureCoding {
        static var supportsSecureCoding: Bool = true
    
        required init?(coder: NSCoder) {}
        func encode(with coder: NSCoder) {}
    }
    

    要解压存储的Meals 数组,您可以使用unarchivedArrayOfObjects(ofClass:from:) 函数,如下所示:

    private func loadMeals() -> [Meal]? {
        do {
            let data = try Data(contentsOf: Meal.ArchiveURL)
            return try NSKeyedUnarchiver.unarchivedArrayOfObjects(ofClass: Meal.self, from: data)
        }
        catch {
            print(error)
            return nil
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2012-11-14
      • 2019-11-08
      • 2019-11-08
      • 2020-01-03
      • 2011-12-02
      相关资源
      最近更新 更多