捕获 NSKeyedUnarchiver 异常

Posted

技术标签:

【中文标题】捕获 NSKeyedUnarchiver 异常【英文标题】:Catching NSKeyedUnarchiver exception 【发布时间】:2014-12-10 00:47:36 【问题描述】:

在 Swift 中,如果无法取消归档数据,NSKeyedUnarchiver.unarchiveObjectWithData(data) 将引发异常。

在某些情况下,我们无法保证数据是否没有损坏,例如从文件中读取时。

我不知道 Swift 中的 try/catch 机制,也不知道像 canUnarchive 这样有助于防止异常的方法。

除了在 Obj-C 中实现 try/catch 之外,有没有纯 Swift 解决这个问题的方法?

【问题讨论】:

我也有同样的问题。您已经找到解决方案了吗? Apple 应该为 swift 做一个 try/catch ...... 同样的问题,这太疯狂了.. 【参考方案1】:

因为unarchiveObjectWithData() 没有throw 它的异常,目前没有办法在Swift 中捕获它(截至撰写时)。 ios 9 SDK 添加了一个新的 NSKeyedUnarchiver 方法 decodeTopLevelObject() 现在 throws 一个错误。您可以使用dotrycatch 控制流来捕获它。

do 
    let result = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(NSData(...))
 catch 
    print(error)

【讨论】:

以上是关于捕获 NSKeyedUnarchiver 异常的主要内容,如果未能解决你的问题,请参考以下文章

重命名 Xcode 项目后出现 NSKeyedUnarchiver 错误

NSKeyedUnarchiver - 需要尝试/捕获?

如何在 Swift 中捕获 NSKeyedUnarchiver“NSInvalidUnarchiveOperationException”?

NSKeyedUnArchiver 崩溃

不可捕获的 IOException

NSKeyedUnarchiver decodeObjectForKey:无法解码类对象的键(NS.objects)