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)
| 归档时间: |
|
| 查看次数: |
2445 次 |
| 最近记录: |