
与Objective-c一起工作:
AppDelegate.h
@interface AppDelegate : NSObject <NSApplicationDelegate> { IBOutlet NSMenu *statusMenu; NsstatusItem * statusItem;}@end AppDelegate.m
@implementation AppDelegate- (voID)applicationDIDFinishLaunching:(NSNotification *)aNotification{ statusItem = [[Nsstatusbar systemStatusbar] statusItemWithLength:NSVariableStatusItemLength]; [statusItem setMenu:statusMenu]; [statusItem setTitle:@"Status Menu"]; [statusItem setHighlightmode:YES];}@end 但是,如果我尝试在swift中基本上做同样的事情,它什么都不做.
class AppDelegate: NSObject,NSApplicationDelegate { @IBOutlet var statusMenu: NSMenu; func applicationDIDFinishLaunching(aNotification: NSNotification?) { let bar = Nsstatusbar.systemStatusbar() let statusItem = bar.statusItemWithLength(CGfloat(NSVariableStatusItemLength)) statusItem.Title = "Status Menu" statusItem.menu = statusMenu statusItem.highlightmode = true }} 没有错误,它只是没有做任何事情.调用函数applicationDIDFinishLaunching,因为它内部的println()创建输出.
有谁知道我在这里做错了什么?
解决方法 这里的问题是,在applicationDIDFinishLaunching完成执行后,statusItem将超出范围,而执行又会释放对象.在Objective-C代码中不是这种情况,因为statusItem变量是在类级别声明的.这应该使你的Swift代码工作:
class AppDelegate: NSObject,NSApplicationDelegate { @IBOutlet var statusMenu: NSMenu; var statusItem: NsstatusItem?; func applicationDIDFinishLaunching(aNotification: NSNotification?) { let bar = Nsstatusbar.systemStatusbar() statusItem = bar.statusItemWithLength(CGfloat(NSVariableStatusItemLength)) statusItem!.Title = "Status Menu" statusItem!.menu = statusMenu statusItem!.highlightmode = true }} 总结 以上是内存溢出为你收集整理的macos – OSX状态菜单在Swift中不起作用全部内容,希望文章能够帮你解决macos – OSX状态菜单在Swift中不起作用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)