从不同的类访问ViewController中的函数?

时间:2015-02-16 04:54:43

标签: ios xcode macos swift

我在我的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!)
   }
}

3 个答案:

答案 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()),而是用字符串参数调用它。