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

如何将NSKeyedUnarchiver.unarchiveTopLevelObjectWithData替换为适配[String]的unarchivedObject

适配[String]类型数组的NSKeyedUnarchiver替代方案

针对你遇到的unarchiveTopLevelObjectWithData在macOS 10.14+被弃用的警告,适配[String]类型数组的代码可以这样修改:

精准适配版本(推荐)

如果确认归档的数据是纯字符串数组,直接指定数组与字符串的OC对应类型即可:

do {
    let stringArray = try NSKeyedUnarchiver.unarchivedObject(ofClasses: [NSArray.self, NSString.self], from: data) as? [String]
    // 在这里使用解析得到的stringArray
} catch {
    // 处理解归档失败的异常,比如数据损坏、类型不匹配等情况
}

简化写法

如果不需要处理错误,也可以用更简洁的形式:

let stringArray = try? NSKeyedUnarchiver.unarchivedObject(ofClass: NSArray.self, from: data) as? [String]

关键说明

  • Swift的String对应OC的NSString,所以解归档时需要在ofClasses中包含NSString.self,确保数组内的元素能被正确解析;
  • 若不确定归档数据的类型,保留NSArray.self和NSString.self的组合即可稳定解析字符串数组;
  • 优先使用do-catch捕获错误,比try?更便于排查解归档失败的具体原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:39:53