我在我的OSX应用程序中有一个名为Server的方法。我正在尝试使用NSTextField设计日志记录控制台,该控制台由其他类更新。这是一个致命的错误:在解开时意外地发现了零......
class Server: NSObject {
var view: ViewController!
func output() {
var received = "hello"
view.sendData(received) // Throws an error here.
}
并且在我的ViewController中看起来非常多,
class ViewController: NSViewController {
@IBOutlet var consoleOut: NSTextView!
func sendData() {
consoleOut.insertText(received!)
}
}
答案 0 :(得分:0)
你应该在调用它的方法之前初始化类的对象。
class Server: NSObject {
var view: ViewController = ViewController() // This initialization is required.
func output() {
var received = "hello"
view.sendData(received) // This will work now.
}
答案 1 :(得分:0)
如果您在IB中使用视图连接了ViewController
,那么您必须将其拖动到Server
,以便将其用作@IBOutlet
(与您的{{类似) 1}})。或者,您可以使用您需要设置的属性,例如您的AppDelegate,您可以在其中实例化consoleOut
并有权访问Server
。
答案 2 :(得分:0)
我建议从viewcontroller初始化服务器对象,所以把
var server = Server(self)
进入你的viewcontroller类并在你的servermodel中使用viewcontroller方法实现一个init,就像这个
init(vc:ViewController) {
self.view = vc
}
还有一件事:vc中的sendData方法不带参数(sendData()),而是用字符串参数调用它。