从后台线程访问IBOutlet NSTextView?

时间:2015-02-16 19:00:25

标签: xcode multithreading macos swift nstextview

所以我花了好几个小时试图调试我的代码,结果我试图从后台线程访问我的NSTextView。长话短说,我尝试在我的代码中使用dispatch_async,在打开时仍然会抛出一个零。如果我改成它?它不会崩溃,但它不会输出任何东西。我正在使用XCode 6和Swift OSX编写我的应用程序。一切都被正确委派,并正确拖动。我有两个类,一个是viewcontroller,另一个叫做Server。服务器初始化一个viewcontroller方法,并调用view.output(),因为我试图制作一个" live"控制台日志。它显示我的服务器对象为nil,consoleOutput为nil,但变量recv不为nil。

class ViewController: NSViewController, NSTextViewDelegate {
var server: Server!

func output(recv: String?) {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
        dispatch_async(dispatch_get_main_queue()) {
            self.consoleOutput.string! += recv!
        }
    }
}

}

这是一个线程错误,我需要从主线程编辑NSTextView。它抛出了这个错误,

fatal error: unexpectedly found nil while unwrapping an Optional value
Printing description of self: 
(VegasPanel.ViewController) self = 0x00006000000e2c00 {      
AppKit.NSViewController = { 
AppKit.NSResponder = { 
ObjectiveC.NSObject = {} 
} 
} 
server = nil 
consoleOutput = nil } 

从我的Server类调用输出,就像这样,

class Server: NSObject, GCDAsyncSocketDelegate {
   let received:String?
   var view = ViewController()

    func socket(sock: GCDAsyncSocket, didReadData data:NSData, withTag tag:Int)
    {
        view.output(received)
    }
 }

0 个答案:

没有答案