Swift中的子类NSApplication

时间:2014-11-26 08:12:58

标签: swift nsapplication

我创建了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)
        }
    }
}
之后,我改变了#34;校长级"在Info.plist到MyApplication中,最后在Main.storyboard的Application Scene中,我也将Application更改为MyApplication。

当我运行应用程序时,我收到以下消息:

Unable to find class: MyApplication, exiting

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:25)

尝试:

@objc(MyApplication)
class MyApplication: NSApplication {

或者,您必须像这样设置Info.plist。

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

没有关于此的确切文档,但是this description is corresponding

  

为了在Objective-C代码中使用Swift类时保留命名空间,Swift类以其完全限定名称公开给Objective-C运行时。因此,当您使用对Swift类的字符串表示形式进行操作的API时,必须包含该类的完全限定名称。例如,在创建基于文档的Mac应用程序时,可以在应用程序的 Info.plist 文件中提供NSDocument子类的名称。在Swift中,您必须使用文档子类的全名,包括从应用程序或框架名称派生的模块名称。

this

  

在Swift类上使用@objc(<#name#>)属性时,该类在Objective-C中可用,没有任何命名空间。