问题标签 [nsstatusbar]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
41 浏览

swift - 有条件地显示窗口或菜单栏视图 SwiftUI macOS

我正在创建一个应用程序,它只存在于菜单栏中,但是如果用户未登录,我希望弹出一个全尺寸的普通窗口,我制作了一个小弹出窗口,这对我来说已经足够了要进入的主应用程序:

在此处输入图像描述

我用来实现此目的的代码:

我在 AppDelegate 中制作了弹出视图,我想渲染它(在菜单栏中带有图标)或只是一个普通的 macOS 窗口(在菜单栏中没有图标)。然后可以通过以下方式轻松地在两者之间切换:

0 投票
1 回答
39 浏览

macos - macOS statusBarApp 没有 Storyboard 创建和关闭 settingsWindow 导致 EXC_BAD_ACCESS

我有一个没有任何带有 main.swift 文件的 Storyboard 的 MacOS 可可 statusBarApp。statusBarIcon 显示一个菜单,该菜单显示一个带有按钮的自定义视图,该按钮应该打开一个 settingsWindow - 它确实如此。如果我关闭设置窗口并重新打开它并再次关闭它,我会收到 EXC_BAD_ACCESS 错误。看来,窗口已解除分配,但引用仍然存在。我不知道如何解决这个问题。

像 Willeke 的建议一样编辑问题:

谢谢你的回答。好的,hier 是一个最小的可重现示例:

创建一个新的 Xcode 项目,带有故事板和 Swift 用于 macOS 应用程序。在 Project-Infos / General / Deployment Info 下:删除情节提要的主要条目。然后删除情节提要文件本身。在信息下将“应用程序是代理”标志设置为是,因此该应用程序仅是 statusBarApp。那么你只需要下面的代码。

异常断点导致这一行:

要重现错误:启动应用程序,单击 statusItem,单击 menuItem,打开一个窗口,关闭窗口,再次单击所有第一步并重新打开窗口。有时这就是崩溃的关键。有时需要多尝试几次关闭窗口,但不要超过 3 次。

main.swift

AppDelegate.swift

ViewController.swift