2015-03-27 4 views
1

Я изучаю Swift последние пару дней, и, похоже, я попал в камень.Показать консольный вывод в NSScrollView и NSTextView в Swift

Я пытаюсь создать окно ViewController, где у меня есть кнопка и NSViewText. Когда я нажимаю кнопку, приложение запрашивает у пользователя лист с NSTextField. При нажатии введите строку NSTextField в переменную, и лист закрыт, и выполняется команда терминала.

Теперь, мой выполнить командный метод в AppDelegate создает канал с NSPipe:

let cmd = NSTask() 
... 
let pipe = NSPipe() 
cmd.standardOutput = pipe 
cmd.launch() 
let data = pipe.fileHandleForReading.readDataToEndOfFile() 
let output: String = NSString(data: data, encoding: NSUTF8StringEncoding)! 

var consoleOutput = output 
return output 

consoleOutput находится вне метода выполнения, так что я пытаюсь отобразить его в ViewController, как это:

EDIT: Изменен предыдущий код, но все еще возникает ошибка:

textView.string = myDelegate.consoleOutput 

Я хочу, чтобы вывод терминала отображался в пределах NSViewText (или NSTextField, или NSScrollView, NSClipView? не уверен какой), в реальном времени. То, что я не могу сделать, это найти способ манипулировать содержанием NSTextView «s, потому что, когда я бегу, я получаю следующее сообщение об ошибке:

fatal error: unexpectedly found nil while unwrapping an Optional value 

Любая помощь будет оценена.

ответ

0

Если присвоение замыкания (например, кодового блока) будет работать вообще, вам придется поместить его после «=» в декларации, а не после: на LHS. Вы в основном пытаетесь объявить тип как статический блок кода. Я удивлен, что компилятор позволяет вам уйти от всего, что жалуется только на сам аспект IBOutlet.

+0

Ahh! Поэтому мы не можем использовать 'IBOutlet', так как мы используем' IBAction'! Понял. Но теперь, когда я изменяю его на '@ BIOutlet var textView: NSTextView!' И использую 'textView.string = myDelegate.consoleOutput', я получаю« фатальную ошибку: неожиданно найденный nil при развертывании необязательного значения » – Jack44

+0

Совершенно иная. IBOutlet - это всего лишь тег, который сообщает Interface Builder и среде, что это переменная, предназначенная для получения ссылки на объект, определенный в раскадровке или nib, когда для вашего контроллера просмотра загружен раскадровка или nib (например, xib). IBAction - это тег, который указывает, что это функция обработчика событий, которая была настроена для вызова через инструменты Interface Builder. IBOutlet находится в разделе декларации и не исполняемых, только префиксы IBAction. – clearlight

Смежные вопросы