我试图解开一个实现NSCoding
协议的自定义对象。此类称为Reservation
及其财产之一是斯威夫特词典:EXC_BAD_INSTRUCTION当解压缩Swift词典
class Reservation {
//...
var orderedExtras : [CarExtra : Int]?
}
CarExtra
也实现NSCoding
。 现在,当我尝试使用
NSKeyedArchiver.archiveRootObject(reservations, toFile: ArchiveURL.path!)
一切正常将文件写入到磁盘。但是,从磁盘读取此对象时遇到问题。 当我试着使用
required convenience init?(coder aDecoder: NSCoder) {
let extras = aDecoder.decodeObjectForKey("orderedExtras") as? [CarExtra : Int]
}
它给了我一个
EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子码=为0x0)
例外取消归档的对象。如果我尝试,而不是治疗未存档的对象作为一个NSDictionary
let extras = aDecoder.decodeObjectForKey("orderedExtras") as? NSDictionary
它不会崩溃,我可以提取我已经保存的数据。 有人可以解释为什么我得到这个错误信息? Of可以简单地在整个应用程序中使用NSDictionary,但我宁愿继续使用Swift类型。
怎么样? NSDictionary为? [CarExtra:Int] 能完成这项工作吗? – Amir
您会在EXC_BAD_INSTRUCTION上提供堆栈跟踪吗? – Amir
我更新了问题。不幸的是, NSDictionary为? [CarExtra:Int]也不起作用。 – slashburn