首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSKeyedUnarchiver unarchiveObjectWithData返回零

NSKeyedUnarchiver unarchiveObjectWithData返回零
EN

Stack Overflow用户
提问于 2015-10-05 09:21:01
回答 1查看 3.9K关注 0票数 7

我有一个类,它用NSCoder/NSKeyedArchiverNSKeyedUnarchiver序列化和反序列化。我有一些单元测试,这些测试旨在检查我对序列化格式中的各种错误的处理情况(这不是一个简单的归档,而是包含归档)。

然而,自从我升级到Swift 2/iOS 9之后,测试显示出了一些不寻常的行为。以前,无效档案的测试失败,因为反序列化无效档案会抛出一个目标-C异常,因为docs状态会使程序崩溃,因为Swift无法捕获它们。这很好,我打算在将来的某个时候修复这个测试。

现在测试通过了。当给我的随机或确定性垃圾喂食时,我反而从unarchiveObjectWithData (而不是一个异常)那里接收回unarchiveObjectWithData。我已经检查了这个方法的文档,没有列出任何行为改变。

坦率地说,我发现这种行为的改变是非常可疑的,因为在任何地方都没有提到这种变化是如何或为什么发生的。我以前失败的单元测试刚刚通过,没有明显的原因。

那么,这是新的预期行为(它返回nil)吗?如果不是,我如何才能获得实际的预期行为(Obj异常)而不是无效存档的nil

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-05 11:43:33

Swift2 2/iOS9 9在throws中引入了无文档化的NSKeyedUnarchiver类方法

代码语言:javascript
复制
extension NSKeyedUnarchiver {
    @warn_unused_result
    public class func unarchiveTopLevelObjectWithData(data: NSData) throws -> AnyObject?
}

但是,如果数据格式完全错误,它似乎就无法工作:它返回nil时没有出错。

代码语言:javascript
复制
let dat = "test".dataUsingEncoding(NSUTF8StringEncoding)!
try! NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(dat) // -> `nil`

只有当未存档程序在解码时发现一些无效实体(例如,未知类名)时,才会引发错误。我认为这是一种错误,或者是在不完全实现的情况下意外发布的。

无论如何,如果您想要Objective异常,只需构造NSKeyedUnarchiver

代码语言:javascript
复制
let dat = "test".dataUsingEncoding(NSUTF8StringEncoding)!
let unarchiver = NSKeyedUnarchiver(forReadingWithData: dat) // -> throws Objective-C exception

但是,没有throws初始化器.还没?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32945068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档