iOS12 中的 NSKeyedUnarchiver 更改 - 如何取消归档字符串数组

Posted

技术标签:

【中文标题】iOS12 中的 NSKeyedUnarchiver 更改 - 如何取消归档字符串数组【英文标题】:NSKeyedUnarchiver changes in iOS12 - How to unarchive an Array of Strings 【发布时间】:2019-05-22 11:56:30 【问题描述】:

Foundation 从 ios 11.4 到 iOS12 有一些变化。不幸的是,我找不到任何有关此主题的有用文档。

在 iOS12 之前,我有这段代码工作得很好可以从某个 filePath 中读取带有字符串的数组:

if let myList : Array<String> = NSKeyedUnarchiver.unarchiveObject(withFile: filePath) as? Array<String> 
   // ...

我发现,iOS12 中有一些我应该使用的新方法,我尝试了这个(当然是在 do-catch 结构中,并且在获取数据对象之后):

let myList : Array<String> = try NSKeyedUnarchiver.unarchivedObject(ofClass: Array<String>, from: data)

我也试过了,但没有成功:

let myList : Array<String> = try NSKeyedUnarchiver.unarchivedObject(ofClass: Array<String>.self, from: data)

有什么推荐吗?

【问题讨论】:

在 Swift 中强烈推荐使用轻量级的JSONSerializationPropertyListSerializationCodable 协议而不是objective-c-ish NSKeyed(Un)archiver 我熟悉 Codable,我将它用于“inAppCreatedObjects”,但在这里我必须从我的应用程序中的早期 IOS 版本迁移数据。 【参考方案1】:

我终于找到了自己。 它适用于这种方法:

if let fileNames = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(dataObject) as? Array<String> 
    // ... 
        

【讨论】:

以上是关于iOS12 中的 NSKeyedUnarchiver 更改 - 如何取消归档字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

iOS 12中的引导模式Iframe隐藏在内容后面

iOS 12.0 中的应用程序崩溃

iOS12系统应用发送邮件中的附件

iOS12 中的 NSKeyedUnarchiver 更改 - 如何取消归档字符串数组

Xcode 12 和 iOS 14 中的手势问题

Ubuntu 12.04 中的 Socket.io 错误