【发布时间】:2015-03-06 13:52:28
【问题描述】:
我正在使用以下 Swift 代码解压缩一个 Swift 类:
required convenience init(coder decoder: NSCoder) {
self.init()
horseID = decoder.decodeIntegerForKey("horseID")
name = decoder.decodeObjectForKey("name") as String!
// if the thumb key does not exist, the following line crashes
thumb = decoder.decodeObjectForKey("thumb") as UIImage!
}
后来添加了“thumb”类成员。我有一个较旧的存档文件,其中没有拇指数据。 Apple 的文档说,取消归档不存在的密钥会返回 nil。这是熟悉的 Objective-C 行为。我的 Swift 代码崩溃并出现错误代码:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)。
从as 更改为as? 并不能解决问题。
这使得在新版本中扩展数据模型变得困难。难道我做错了什么?我是 Swift 新手。
【问题讨论】:
-
as UIImage!是强制转换,如果返回值为 nil 会崩溃。您是否尝试过可选演员as? UIImage? -
thumb = decoder.decodeObjectForKey("thumb") as? UIImage 也会崩溃
-
您是否设置了调试停止并检查了
thumb的内容? -
未执行对 thumb 的分配。在此之前代码崩溃。
-
@ThomasZimmer 这似乎很棘手,您能在某处提供源代码并在此处分享链接吗?
标签: ios swift exc-bad-instruction