У меня есть главное меню, в котором есть несколько пунктов меню (Файл, Правка, Вид, Окно и т. Д.). Для всех пунктов меню их действие настроено на операцию в FirstResponder
.
Приложение имеет одно окно, и это окно имеет тип MyWindow
, который наследуется от NSWindow
(см. Ниже).
Обратите внимание, что NSWindow
реализует NSMenuValidation
и, следовательно, он помечается как ошибка, когда MyWindow
объявляет о соответствии NSMenuValidation
.
Я переопределил функцию validateMenuItem
следующим образом:
class MyWindow: NSWindow, NSMenuDelegate {
...
override func validateMenuItem(_ item: NSMenuItem) -> Bool {
Log.atDebug?.log("\(item.title)")
....
}
}
Когда я запускаю приложение, функция validateMenuItem
вызывается для пунктов меню File
и Window
, но не для пунктов Edit
и View
.
Примечание. Log - это экземпляр каркаса ведения журналов (SwifterLog).
Действия для всех пунктов меню вызываются правильно. (Также для пунктов меню, для которых validateMenuItem
не вызывается)
Мне не сложно обойти эту проблему (функция menuNeedsUpdate
вызывается для всех меню и может использоваться для этого), но я хотел бы знать, почему происходит такое поведение.