Мне удалось заставить его работать из подкласса NSWindowController
class MyWindowController: NSWindowController {
override func keyDown(theEvent: NSEvent) {
print("keyCode is \(theEvent.keyCode)")
}
}
UPDATE:
import Cocoa
protocol WindowControllerDelegate {
func keyDown(aEvent: NSEvent)
}
class WindowController: NSWindowController {
var delegate: WindowControllerDelegate?
override func windowDidLoad() {
super.windowDidLoad()
delegate = window?.contentViewController as! ViewController
}
override func keyDown(theEvent: NSEvent) {
delegate?.keyDown(theEvent)
}
}
и ViewController:
class ViewController: NSViewController, WindowControllerDelegate {
@IBOutlet weak var textField: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
override func keyDown(theEvent: NSEvent) {
textField.stringValue = "key = " + (theEvent.charactersIgnoringModifiers
?? "")
textField.stringValue += "\ncharacter = " + (theEvent.characters ?? "")
textField.stringValue += "\nmodifier = " + theEvent.modifierFlags.rawValue.description
}
}
Одна стандартная проблема: процесс мог ожидать Вас для чтения его вывода. Создайте отдельный поток для чтения из его стандартного вывода, в то время как Вы ожидаете его для выхода. Это - что-то вроде боли, но это может быть проблемой.
Я знаю, что мой SVN repos может иногда отставать, поэтому возможно, 5 секунд не достаточно долги? Вы скопировали строку, Вы являетесь передающими к процессу от точки останова, таким образом, Вы положительны, что это ничего не предлагает Вам?
Джон Скит прав в деньгах!
Если вы не возражаете против опроса после запуска команды svn, попробуйте следующее:
Process command = new Process();
command.EnableRaisingEvents = false;
command.StartInfo.FileName = "svn.exe";
command.StartInfo.Arguments = "your svn arguments here";
command.StartInfo.UseShellExecute = false;
command.StartInfo.RedirectStandardOutput = true;
command.Start();
while (!command.StandardOutput.EndOfStream)
{
Console.WriteLine(command.StandardOutput.ReadLine());
}