Доступ к IBOutlet NSTextView из фонового потока?
Таким образом, я потратил часы, пытаясь отладить свой код, оказалось, что я пытался получить доступ к своему NSTextView из фонового потока. Короче говоря, я пытался использовать dispatch_async в своем коде, все еще выбрасывает ноль при развертывании. Если я изменю это на? он не рухнет, но ничего не выведет. Я пишу свое приложение, используя 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)
}
}