xcode - Cocoa 应用程序未在 High Sierra 上加载视图或运行代码
问题描述
我在 Mac AppStore 上有一个应用程序,许多用户最近写信说它在 High Sierra 上不起作用(可能是 10.13.6,很难从中提取特定信息)。我设法在朋友的设备上重现了该问题,但是我将无法使用该设备使用 Xcode 等进行构建。
问题似乎是NSViewController
根本不加载它的子视图!下面显示的灰色视图控制器应该有下拉菜单和按钮。
我还注意到关闭灰色窗口不会关闭红色透明窗口 - 在 Mojave 上,执行此操作的代码按预期运行。状态栏中的自定义快捷方式/菜单项似乎也不会运行它绑定的代码。请注意,红色窗口是通过灰色窗口中的代码呈现的,因此一些代码正在设法运行。
这个模糊的线程似乎提到了同样的问题,就像这个问题一样。然而,他们都没有要求程序化解决方案。
有谁知道如何解决这个问题,还是我需要告诉我的用户更新他们的操作系统?
编辑:设法在 High Sierra 上编译并且视图仍然没有出现(视图调试器中也没有任何迹象)。控制台说:
2019-02-02 16:53:41.602178+1100 Translate This[20410:36446120] -[NSMenu setItemArray:]: unrecognized selector sent to instance 0x604000069180
2019-02-02 16:53:41.602366+1100 Translate This[20410:36446120] Failed to set (contentViewController) user defined inspected property on (NSWindow): -[NSMenu setItemArray:]: unrecognized selector sent to instance 0x604000069180
2019-02-02 16:54:57.678247+1100 Translate This[20410:36446120] -[NSStoryboard _bundle]: unrecognized selector sent to instance 0x600000000660
2019-02-02 16:54:57.728849+1100 Translate This[20410:36446120] -[NSStoryboard _bundle]: unrecognized selector sent to instance 0x600000000660
0x604000069180
是一个NSMenu
。我没有明确地做我代码中控制台输出中描述的任何事情。
解决方案
我在 macOS 10.14 上构建的简单菜单栏应用程序遇到了同样的错误,但在早期操作系统版本上运行时失败:
[NSMenu setItemArray:]: unrecognized selector sent to instance
在查看 NSMenu 的头文件时,我看到:
/* Returns an array containing the receiver's menu items.
This property is settable in macOS 10.14 and later. */
open var items: [NSMenuItem]
因此,您不能设置menu.items = someItemsArray
而是使用其他 api ( menu.addItem(item)
,menu.removeAllItems()
等) 来解决问题。
这似乎是 Apple 在 Xcode 10 中的疏忽,因为它没有警告您它不能根据您的应用程序的部署目标进行设置。
推荐阅读
- linux - 如何保护 docker-compose 文件中的凭据
- python - 比较精确到分钟的日期时间
- google-apps-script - 将 USER_TOKEN 身份验证存储在数据源而不是用户属性中
- r - 根据其他列中的值对列中的值求和;第1部分
- java - Java HashMap 键散列
- c# - 如何将char数组转换为int
- javascript - Discord js不发送嵌入
- java - 在 httpsurlconnection 的 POST 方法中传递 JSON 数据
- javascript - Vue:当轮播滑块显示其幻灯片时播放和停止视频
- python - 如何获取文本格式的模型预测标签?