[swift]NSApplicationDelegate 不工作没有storyboard

标签: Xcode Swift
发布时间: 2017/1/22 22:14:53
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图 macOS 上创建应用程序没有storyboard在 Xcode 8 (稳定) macOS 塞拉利昂。然而,我 AppDelegate 甚至不启动。这里是我拥有的代码︰

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    var window: NSWindow!

    override init() {
        super.init()
        print("Init")
    }

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        print("Finished launching")

        // Create a window
        window = NSWindow()

        // Add the view controller
        let viewController = ViewController()
        window.contentView?.addSubview(viewController.view)

        // Show the window
        window.makeKeyAndOrderFront(nil)
    }
}

既不 initapplicationDidFinishLaunching(_ aNotification: Notification) 被调用。任何帮助,将不胜感谢。

解决方法 1:

你需要做几件事在这里

  1. 删除 NSMainStoryboardFile plist 中的键值
  2. 创建 NSApplication 子类并将其分配给 Principal Class (NSPrincipalClass) 的关键。

assign custom class to principal class

名称必须是用你的模块名称完全限定。

  1. 手动实例化您在 NSApplication 子类中的代理并将其分配给 delegate 属性。

请确保您保持您的委托对象的强引用。我只是用 let 在这里。

class GrookApplication: NSApplication {

    let strongDelegate = AppDelegate()

    override init() {
        super.init()
        self.delegate = strongDelegate
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

例如一个简单的委托。

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    override init() {
        super.init()
        print("wassup")
    }

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        print("yo! I'm alive")
    }

}
官方微信
官方QQ群
31647020