Xcode 可故障och非可故障初始化器阻止我扩展NSView和实现NSCoding

Xcode 可故障och非可故障初始化器阻止我扩展NSView和实现NSCoding,xcode,macos,cocoa,swift,nscoding,Xcode,Macos,Cocoa,Swift,Nscoding,我在实现实现NSCoding的子类到NSView时遇到问题 似乎init(coder:NSCoder)的声明在NSView和NSCoding中存在冲突。 NSView现在说它是可故障的,但是NSCoding仍然说它是不可故障的 当我试图覆盖init(coder:NSCoder)并进行自定义初始化时,Xcode 6.1会给我一条错误消息: 非故障初始值设定项不能链接到故障初始值设定项 “init(编码者:)”是用“init”写的吗 我应该如何进行我的类的自定义初始化 下面是一个愚蠢的例子,我扩展了

我在实现实现
NSCoding
子类到
NSView
时遇到问题

似乎
init(coder:NSCoder)
的声明在
NSView
NSCoding
中存在冲突。
NSView
现在说它是可故障的,但是
NSCoding
仍然说它是不可故障的

当我试图覆盖
init(coder:NSCoder)
并进行自定义初始化时,Xcode 6.1会给我一条错误消息:

非故障初始值设定项不能链接到故障初始值设定项 “init(编码者:)”是用“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
,因为
nsrresponder
(NSView的超类
NSView
)已经遵守了它

required init?(coder: NSCoder) {
    super.init(coder: coder)
    self.clickCounter = coder.decodeObjectForKey("clickCounter") as Int
}

这使编译器感到满意,但(对我来说)似乎很奇怪:
NSCoding
需要
init(coder-aDecoder:NSCoder)
,即不可失败的初始值设定项,但
NSResponder
NSView
等实现
init?(coder:NSCoder)
也许导入的标题中有错误?是的,我想是的-/谢谢因此,为了总结解决方案,我删除了与NSCoding的显式一致性,并添加了?我的初衷是使它不可能失败。但仍然很奇怪,我想知道NSResponder是如何通过在其failable init中进行NSCoding来实现所需的非failable init的。还是我错过了一些明显的东西?老兄,你帮了我很多挫折。论坛和文档中的所有废话都没有真正指出这一点。非常感谢。