是否有一个main.swift等同于@NSApplicationMain注释?

是否有一个main.swift等同于@NSApplicationMain注释?,第1张

概述在XCode中创建一个新的 Cocoa项目给我一个AppDelegate.swift文件,如下所示: import Cocoa@NSApplicationMainclass AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var window: NSWindow!} The @NSApplicationMai 在XCode中创建一个新的 Cocoa项目给我一个AppDelegate.swift文件,如下所示:

import Cocoa@NSApplicationMainclass AppDelegate: NSObject,NSApplicationDelegate {    @IBOutlet weak var window: NSWindow!}

The @NSApplicationMain attribute is documented here作为

NSApplicationMain

Apply this attribute to a class to indicate that it is the application delegate. Using this attribute is equivalent to calling the NSApplicationMain(_:_:) function.

If you do not use this attribute,supply a main.swift file with code at the top level that calls the NSApplicationMain(_:_:) function as follows:

06001

文档中的说明不起作用:AppDelegate类从未实例化.在this answer,vadian中建议main.swift的以下内容,它比文档中的代码更好用:

import Cocoalet appDelegate = AppDelegate()NSApplication.shared().delegate = appDelegate_ = NSApplicationMain(Commandline.argc,Commandline.unsafeArgv)

但是,这仍然不会提供与@NSApplicationMain相同的行为.考虑使用上面的main.swift和以下AppDelegate.swift:

import Cocoaclass AppDelegate: NSObject,NSApplicationDelegate {    @IBOutlet weak var window: NSWindow!    var foo: Nsstatusbar! = Nsstatusbar.system();}

上面的AppDelegate.swift使用@NSApplicationMain注释,但是当使用上面的main.swift时,它在运行时因错误而失败

Assertion Failed: (CGAtomicGet(&is_initialized)),function CGSConnectionByID,file Services/Connection/CGSConnection.c,line 127.

我认为这个is_initialized错误意味着@NSApplicationMain设置了一些内容,以便在NSApplicationMain函数进行一些初始化之后实例化AppDelegate.这表明以下main.swift,它将委托初始化移动到NSApplicationMain调用之后:

import Cocoa_ = NSApplicationMain(Commandline.argc,Commandline.unsafeArgv)let appDelegate = AppDelegate()NSApplication.shared().delegate = appDelegate

但是,这也不起作用,因为NSApplicationMain永远不会返回!上面的main.swift等同于文档中的破坏建议,因为后两行是死代码.

因此,我认为必须有一些方法可以将对AppDelegate类的引用作为NSApplicationMain函数的参数传递,以便Cocoa可以进行初始化,然后实例化我的AppDelegate类本身.但是,我认为没办法这样做.

是否有一个main.swift提供的行为真正等同于@NSApplicationMain注释?如果是这样,那main.swift是什么样的?如果没有,@ NSApplicationMain实际上在做什么,以及如何修改它?

解决方法 该文档假定有一个xib或storyboard通过Interface Builder中的对象(蓝色多维数据集)实例化AppDelegate类.在这种情况下两者

> main.swift包含NSApplicationMain(Commandline.argc,Commandline.unsafeArgv)

> AppDelegate类中的@NSApplicationMain

表现完全一样.

如果没有xib或storyboard,则负责初始化AppDelegate类,将其分配给NSApp.shared().委托并运行应用程序.您还必须考虑对象的外观顺序.例如,在调用NSApp.shared()以启动应用程序之前,无法初始化与AppKit相关的对象.

例如,这种略微改变的语法

let app = NSApplication.shared()let appDelegate = AppDelegate()app.delegate = appDelegate_ = NSApplicationMain(Commandline.argc,Commandline.unsafeArgv)

你可以在应用程序之外的AppDelegate中初始化状态栏DIDFinishLaunching:

let statusItem = Nsstatusbar.system().statusItem(withLength: -1)

因为在初始化AppDelegate类之前调用​​了启动应用程序的NSApplication.shared().

总结

以上是内存溢出为你收集整理的是否有一个main.swift等同于@NSApplicationMain注释?全部内容,希望文章能够帮你解决是否有一个main.swift等同于@NSApplicationMain注释?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1018305.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存