2
我遇到問題實施子類到NSView
實現NSCoding
。Failable和非failable初始化器阻止我擴展NSView和實現NSCoding
看來init(coder: NSCoder)
的聲明在NSView
和NSCoding
中是衝突的。 NSView
時下說它是失敗的,但NSCoding
仍然說它不失敗。
當我嘗試重寫init(coder: NSCoder)
,做我的自定義初始化時,Xcode 6.1給我一個錯誤信息:
非failable初始化無法鏈failable初始化 「的init(編碼器:)」寫有'在裏面?'
我該怎麼做我的班級的自定義初始化?
這裏是一個愚蠢的例子,我擴展了一個視圖,我想爲我的視圖保留一個額外的點擊計數器。
import Cocoa
import Foundation
class MyView: NSView, NSCoding {
var clickCounter:Int = 0
required init(coder: NSCoder) {
super.init(coder: coder)
coder.encodeObject(self.clickCounter,
forKey: "clickCounter")
}
override func encodeWithCoder(coder: NSCoder) {
super.encodeWithCoder(coder)
coder.encodeObject(self.clickCounter, forKey: "clickCounter")
}
override func mouseDown(theEvent: NSEvent) {
clickCounter++
}
}
滿足編譯器,但它似乎很奇怪(我):'NSCoding'需要'的init(編碼器aDecoder:NSCoder)',即非failable初始化,但'NSResponder','NSView'等實現'init?(coder:NSCoder)'。 - 可能是導入頭文件中的錯誤? – 2014-10-28 10:54:44
是的,我認爲是的。 : -/ – rintaro 2014-10-28 10:55:19
謝謝!所以總結解決方案,我刪除了明確符合NSCoding並添加了一個?到我的初步使它failable。仍然奇怪,我想知道NSResponder是如何設法在NSFoding的可疑初始化過程中實現所需的無法初始化的init。還是我錯過了明顯的東西? – Hunkpapa 2014-10-28 13:23:38