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