可用的och不可用的初始化器阻止我扩展NSView并实现NSCoding

Hun*_*apa 2 macos xcode cocoa nscoding swift

我有一个实施的问题子类NSView实现NSCoding.

似乎声明init(coder: NSCoder)NSView和中是冲突的NSCoding. NSView如今说它可以使用,但NSCoding仍然说它是不可用的.

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

一个不可用的初始化程序无法链接到用'init?'编写的可用初始化程序'init(coder :)'

我该如何做我班级的自定义初始化?

这是一个愚蠢的例子,我扩展了一个视图,我想为我的视图保留一个额外的点击计数器.

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++
    }    
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

rin*_*aro 11

您不必明确遵守 NSCoding,因为NSResponder(超类NSView)已经符合它.

required init?(coder: NSCoder) {
    super.init(coder: coder)
    self.clickCounter = coder.decodeObjectForKey("clickCounter") as Int
}
Run Code Online (Sandbox Code Playgroud)