You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NSKeyedUnarchiver解归档对象?弃用方法替代方案

替代弃用解归档方法的方案

当NSKeyedUnarchiver.unarchivedTopLevelObjectWithData()被弃用后,推荐使用类型安全的NSKeyedUnarchiver.unarchivedObject(ofClasses:from:)方法处理数组类型的解归档操作——因为你的归档根对象是[Person]数组,需要同时指定数组和元素的类。

具体解归档代码示例

// 解归档函数:传入归档后的Data,返回[Person]类型的可选值
func unarchivePeople(from data: Data) -> [Person]? {
    do {
        // 指定允许解归档的类集合:NSArray对应Swift的[Person],Person是数组元素类型
        let unarchivedResult = try NSKeyedUnarchiver.unarchivedObject(
            ofClasses: [NSArray.self, Person.self],
            from: data
        )
        // 将结果转换为Swift数组类型
        return unarchivedResult as? [Person]
    } catch {
        print("解归档失败:\(error.localizedDescription)")
        return nil
    }
}

关键说明

  • 使用ofClasses参数是因为归档根对象是数组,必须同时声明数组(NSArray.self)和数组内元素(Person.self)的类,确保解归档过程的类型安全。
  • 相比弃用的方法,该方法会在解归档时验证类型,避免因类型不匹配导致的潜在崩溃。

如果需要解归档单个Person对象,可使用更简洁的unarchivedObject(ofClass:from:)方法:

func unarchiveSinglePerson(from data: Data) -> Person? {
    do {
        return try NSKeyedUnarchiver.unarchivedObject(ofClass: Person.self, from: data)
    } catch {
        print("解归档失败:\(error.localizedDescription)")
        return nil
    }
}

内容的提问来源于stack exchange,提问作者Avii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:50:15