Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 从后台线程访问ibnstextview?_Xcode_Multithreading_Macos_Swift_Nstextview - Fatal编程技术网

Xcode 从后台线程访问ibnstextview?

Xcode 从后台线程访问ibnstextview?,xcode,multithreading,macos,swift,nstextview,Xcode,Multithreading,Macos,Swift,Nstextview,所以我花了几个小时调试我的代码,结果我试图从后台线程访问我的NSTextView。长话短说,我尝试在代码中使用dispatch_async,但在展开时仍然抛出nil。如果我改成?它不会崩溃,但不会输出任何内容。我正在使用XCode 6和Swift OSX编写我的应用程序。一切都被正确地委派,并被正确地拖拽。我有两个类,一个viewcontroller和一个名为Server的类。服务器初始化viewcontroller方法,并调用view.output,因为我正在尝试创建实时控制台日志。这表明我的

所以我花了几个小时调试我的代码,结果我试图从后台线程访问我的NSTextView。长话短说,我尝试在代码中使用dispatch_async,但在展开时仍然抛出nil。如果我改成?它不会崩溃,但不会输出任何内容。我正在使用XCode 6和Swift OSX编写我的应用程序。一切都被正确地委派,并被正确地拖拽。我有两个类,一个viewcontroller和一个名为Server的类。服务器初始化viewcontroller方法,并调用view.output,因为我正在尝试创建实时控制台日志。这表明我的服务器对象是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 } 
正在从我的服务器类调用输出,如下所示

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

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

如果recv为零,则recv!从零和recv开始会崩溃吗?将不执行该语句。所以这是设计的。@ThomasKilian recv不是零,这是wierd部分。崩溃的是consoleOutput,因为self->server=nil,consoleOutput=nil。这就是它崩溃时读到的内容。我有一种感觉,这与我初始化ViewController导致我的服务器变为零有关。您还正在展开consoleOutput.string。如果这是零,它也将崩溃。你用空字符串初始化它了吗?@ThomasKilian不,我没有,我想我做不到。我认为这是一个线程问题。为什么你不能?这是一笔财产。只需像var consoleOutput一样初始化它=