我試圖解開一個實現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