NSApplicationDelegate 的 applicationDidFinishLaunching 未被调用

问题描述 投票:0回答:4

我一直在尝试使用 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()

附注还有一个类似的问题是关于

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
swift macos cocoa nsapplication-delegate
4个回答
4
投票

如果你想在 Swift 3 中实现 Objective-C 协议,你需要使用

_
表示该方法的第一个参数没有标签。

func applicationDidFinishLaunching(_ aNotification: Notification) {

(更新)

抱歉,在我的第一个代码中,我忘记将

NSNotification
替换为
Notification
。 (谢谢,利奥·达布斯。)


3
投票

我遇到了类似的问题,

func applicationDidFinishLaunching(_ aNotification: Notification)
没有被调用。

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

解决方案:只需将其移除然后重新连接即可解决我的问题。

这是重新创建连接的方法


0
投票

您引用但不使用

NSApplication.shared
的行看起来像是一个拼写错误。如果将其替换为
NSApp = NSApplication.shared
,并确保 AppDelegate 中的方法签名正确,应该可以工作。


0
投票

对我来说...启动时我看不到任何窗口。 当我在其中一个窗口上勾选该框时,当我运行应用程序时,applicationDidFinishLaunching 就会被调用。

© www.soinside.com 2019 - 2024. All rights reserved.