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