Cocoa应用程序无法在High Sierra上加载视图或运行代码

问题描述 投票:2回答:2

我在Mac AppStore上有一个应用程序,许多用户最近写过它说它不适用于High Sierra(可能是10.13.6,很难从中提取特定信息)。我设法在朋友的设备上重现了这个问题,但是我无法使用该设备来构建Xcode等。

问题似乎是NSViewController根本没有加载它的子视图!灰色视图控制器如下所示should have dropdowns and buttons in itbug

我还注意到关闭灰色窗口并没有关闭红色透明窗口 - 在Mojave上,执行此操作的代码按预期运行。状态栏中的自定义快捷方式/菜单项似乎也不会运行它所绑定的代码。请注意,红色窗口是通过灰色窗口中的代码显示的,因此有些代码可以运行。

This vague thread似乎提到了同样的问题,this question也是如此。然而,他们都没有要求程序化的解决方案。

有谁知道如何解决这个问题,还是我需要告诉我的用户更新他们的操作系统?

编辑:设法在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。我没有明确地在我的代码中执行控制台输出中描述的任何事情。

xcode cocoa nswindow macos-high-sierra nsviewcontroller
2个回答
1
投票

我在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,而是使用其他apis(menu.addItem(item)menu.removeAllItems()等)来解决问题。

这似乎是Apple在Xcode 10中的疏忽,因为它没有警告您根据您的应用程序的部署目标无法设置它。

https://openradar.appspot.com/45517851


1
投票

在我的情况下,gdub的答案是正确的!

但请注意,对我来说问题不是由窗口的主要NSMenu引起的(确实是通过使用故事板设置的),但是我们有一个弹出按钮(NSPopupButton),它也使用了NSMenu,我们也是用items = [...]初始化,而不是在循环中调用addItem()。它只是不明显因为它是在一个内部自定义NSView,所以它花了我几个小时来挖掘它。

我同意根本问题是Xcode没有告诉您如果设置项目需要@available 10.14,但是为了解决方法,请检查您的代码以查看您是否自己设置了NSMenu.items,并将其转换为带有addItem的循环。你确实提到你有弹出式按钮(就像我们一样),所以我希望你能够修复它和你的应用程序再次在10.13上工作。

© www.soinside.com 2019 - 2024. All rights reserved.