所以我花了好几个小时试图调试我的代码,结果我试图从后台线程访问我的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)
}
}