OSX 状态菜单在 Swift 中不起作用

2024-04-03

我尝试使用 swift 将一个简单的状态菜单添加到状态栏,但它不会显示。

与 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() 创建了输出。

有谁知道我在这里做错了什么?


这里的问题是statusItem之后超出范围applicationDidFinishLaunching完成执行并释放该对象。 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
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OSX 状态菜单在 Swift 中不起作用 的相关文章

随机推荐

  • admob广告不显示

    我制作了一个简单的应用程序 并在其中添加了一个广告 但它没有显示在设备中 我的代码中没有错误 xml页面
  • Dockerfile 构建引发不够范围:公共 openjdk 映像授权失败

    我正在尝试使用以下命令运行以下 Dockerfile docker compose up remove orphans force recreate build d Dockerfile FROM maven 3 6 3 jdk 11 as
  • Java中如何查找CPU密集型类?

    我有一个使用多线程的 Java 大型程序 在某些情况下 程序开始使用我的八核系统中的三个核心的 100 在正常使用中 程序以 1 2 的速度使用所有核心 如何找到重载核心的类 使用分析器 例如与 jdk 1 6 0 10 捆绑的 jvisu
  • BIO中的B代表什么?

    OpenSSL 使用称为 I O 抽象BIO http www openssl org docs crypto bio html 但我在文档中找不到任何地方说明 B 代表什么 IO 显然是输入 输出 各种网站表明 B 代表basic or
  • jQuery 自动淡入下一个 html 元素然后循环重新启动

    I have a a a a 其中 i 是从 1 开始的当前迭代的值 并将呈现如下内容 a a a a 我需要的是一个脚本 仅使第一个元素保持可见 然后在几秒钟 假设 4 5 后淡出并淡入下一个元素 并重复这个循环直到最后一个元素 然后循环
  • 如何知道这个线程是否是UI线程

    Android 上有什么方法可以知道运行我的代码的线程是否是 UI 线程 在摇摆有SwingUtilities isEventDispatchThread 告诉我我是否在 UI 线程上 Android SDK 中是否有任何函数可以让我知道这
  • 将查询转换为存储过程

    下面是一个包含临时表的大查询 我一直在试图找出将其转换为存储过程的语法 我似乎无法弄清楚 我应该能够使用变量选择日期范围 Report Start DT and Report End DT CREATE PROCEDURE gw ppp d
  • Selenium Headless Chrome 和语言设置

    我正在使用 python 中的 selenium 和 chrome 驱动程序 我可以像这样设置 chrome 浏览器的语言 options webdriver ChromeOptions options add experimental o
  • 多重继承:派生类仅从一个基类获取属性?

    我试图学习Python中多重继承的概念 考虑一个类Derv派生自两个类 Base1 and Base2 Derv仅继承第一个基类的成员 class Base1 def init self self x 10 class Base2 def
  • Angular 路由的奇怪行为

    我之前曾问过我奇怪的路由问题 我现在有一个解决方案 但仍然偶尔会有奇怪的行为 我的页面应该转到 登录 一旦成功 然后转到 主 这实际上现在有效 除了转到登录 gt 主页 gt 空白 gt 主页 最后的 闪烁 或刷新我不明白 这解释了最初的行
  • SQL - 抑制重复的*相邻*记录

    我需要运行一个 Select 语句 DB2 SQL 该语句不会根据某个字段提取相邻行重复项 具体来说 我想找出数据何时changes 这变得很困难 因为它可能会变回其原始值 也就是说 我有一个大致类似于下面的表格 按字母排序 然后按日期排序
  • 监控封闭图 Akka Stream

    如果我创建了一个RunningGraph在 Akka Stream 中 我怎么知道 从外部 当所有节点因完成而被取消时 当所有节点因错误而停止时 我认为没有办法对任意图执行此操作 但是如果您可以控制图 则只需将监视接收器附加到每个可能失败或
  • QSlider值改变信号

    我使用 QSlider v4 6 进行输入并向用户提供反馈 对于反馈 我将调用 setValue 方法 我试图找到一个仅当用户修改该值时才会触发的信号 当用户更改值以及我调用 setValue 时 将触发 valueChanged 信号 s
  • 什么是 android:sharedUserLabel 以及它在 android:sharedUserID 之上添加了哪些附加值?

    文档 http developer android com guide topics manifest manifest element html uid http developer android com guide topics ma
  • 替换 只替换第一个

    我使用以下代码允许 JQuery UI 工具提示函数中的换行符 function document tooltip linebreak tooltip content function callback callback this prop
  • 如何以低廉的成本确定列是否只包含 NULL 记录?

    我有一个大表 有 500 列和 100M 行 基于一个小样本 我相信只有大约 50 列包含任何值 其他 450 列仅包含 NULL 值 我想列出不包含数据的列 在我当前的硬件上 查询每一列大约需要 24 小时 select count 1
  • 配置“:app:api”包含在依赖项解析中后无法更改它的依赖项

    无法更改配置的依赖关系 应用程序 api 当它被包含在依赖解析中之后 我也遇到了同样的错误 谢谢 Dominik https stackoverflow com users 1653268 dominik kunicki用于链接到重复项is
  • 正则表达式匹配数字或特定字符串(即“全部”)

    这听起来很简单 但我的正则表达式知识有限 我需要一个表达式来匹配十进制数或字符串 all 就像在范围验证器中允许单词 all 代表最大范围一样 我认为这样的事情可能会起作用 d d any 但以上不适用于 任何 这是一个不使用正则表达式的解
  • .Net Framework 版本 C# 7.2 可用

    我尝试安装 net框架4 7 2 项目属性中目标框架仍然为空 我尝试运行的程序使用只读结构体 这是一部分C 7 2 你能指导我 Net Framework 版本有C 7 2 语言功能独立于 Net 版本 框架 核心 标准 您将需要使用能够理
  • OSX 状态菜单在 Swift 中不起作用

    我尝试使用 swift 将一个简单的状态菜单添加到状态栏 但它不会显示 与 Objective c 一起工作 AppDelegate h interface AppDelegate NSObject