Подтвердить что ты не робот

Подкласс NSApplication в Swift

Я создал подкласс NSApplication:

class MyApplication: NSApplication {
    override func sendEvent(theEvent: NSEvent) {
        if theEvent.type == NSEventType.KeyUp && (theEvent.modifierFlags & .CommandKeyMask).rawValue != 0 {
            self.keyWindow?.sendEvent(theEvent)
        } else {
            super.sendEvent(theEvent)
        }
    }
}

После этого я изменил "Основной класс" в Info.plist на MyApplication, а в конце на сцене приложения в Main.storyboard я также изменил приложение на MyApplication.

Когда я запускаю приложение, я получаю следующее сообщение:

Невозможно найти класс: MyApplication, выход из

Может кто-то помочь мне с этим?

4b9b3361

Ответ 1

Try:

@objc(MyApplication)
class MyApplication: NSApplication {

ИЛИ, вы должны установить Info.plist следующим образом.

<key>NSPrincipalClass</key>
<string>YourAppName.MyApplication</string>
        ^^^^^^^^^^^^

Нет точного документа об этом, но это описание соответствует:

Чтобы сохранить пространство имен, когда класс Swift используется в коде Objective-C, классы Swift отображаются во время выполнения Objective-C с их полными именами. Поэтому, когда вы работаете с API-интерфейсами, которые работают с строковым представлением класса Swift, вы должны указать полное имя класса. Например, когда вы создаете Mac-приложение на основе документов, вы указываете имя своего подкласса NSDocument в вашем приложении Info.plist. В Swift вы должны использовать полное имя вашего подкласса документа, включая имя модуля, полученное от имени вашего приложения или фреймворка.

и this:

Когда вы используете атрибут @objc(<#name#>) в классе Swift, класс становится доступным в Objective-C без какого-либо пространства имен.