未调用NSApplicationDelegate的applicationDidFinishLaunching

时间:2016-09-03 23:10:56

标签: swift macos cocoa nsapplication-delegate

我一直在尝试使用Swift 3,但我无法上手。以下代码正在编译,但它不记录任何内容。看起来没有调用applicationDidFinishLaunching。我在这里错过了一些关键的部分吗?

源/ main.swift

import AppKit

class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(aNotification: NSNotification) {
        NSLog("application start")
    }
}

NSApplication.shared()
NSApp.setActivationPolicy(.regular)
let controller = AppDelegate()
NSApp.delegate = controller
NSApp.run()

P.S。关于applicationDidFinishLaunching被调用但没有打印任何东西的问题也有类似的问题。我认为事实并非如此,因为window.orderFrontRegardless()而不是记录也对我没有影响。

System Version: OS X 10.11.6

> swift --version
Apple Swift version 3.0 (swiftlang-800.0.43.6 clang-800.0.38)
Target: x86_64-apple-macosx10.9

3 个答案:

答案 0 :(得分:3)

如果要在Swift 3中实现Objective-C协议,则需要使用_表示该方法没有第一个参数的标签。

func applicationDidFinishLaunching(_ aNotification: Notification) {

(UPDATE)

抱歉,在我的第一个代码中,我忘记将NSNotification替换为Notification。 (谢谢,Leo Dabus。)

答案 1 :(得分:0)

您引用的行,但不使用NSApplication.shared看起来像拼写错误。如果用NSApp = NSApplication.shared替换它,并确保AppDelegate中的方法签名是正确的,那么应该有效。

答案 2 :(得分:0)

我遇到了类似的问题,其中func applicationDidFinishLaunching(_ aNotification: Notification)没有得到呼叫。

对我来说,问题出在 App Delegate引用出口

enter image description here

  

解决方案:只需将其删除然后再连接回去,就可以解决我的问题。

这是重新创建连接的方式

enter image description here