可可应用程序未在High Sierra上加载视图或运行代码

时间:2019-01-31 03:04:24

标签: xcode cocoa nswindow macos-high-sierra nsviewcontroller

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

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

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

This vague threadthis 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

0x604000069180NSMenu。我没有明确执行代码中控制台输出中描述的任何事情。

2 个答案:

答案 0 :(得分:1)

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

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

我同意根本的问题是Xcode不会告诉您是否需要@available 10.14来设置项目,但是要解决此问题,请检查您的代码以查看是否在自己的某个位置设置了NSMenu.items,然后将其变成一个与addItem循环。您确实提到您有弹出按钮(就像我们一样),所以希望您能够修复它,并使您的应用也可以在10.13上再次运行。

答案 1 :(得分:0)

我在基于macOS 10.14的简单菜单栏应用程序上遇到了相同的错误,但是在较早的OS版本上运行时却失败了:

$('#calendar').fullCalendar({ header: { left: 'prev,next today', center: 'title', right: 'month,agendaWeek,agendaDay' }, eventLimit: true, timeFormat: 'H:mm', eventLimitClick: function(cellInfo, jsEvent, view) { var from_date_val = JSON.stringify(cellInfo.date); var from_to_val = JSON.stringify(cellInfo.date); }, });

查看NSMenu的头文件时,我看到:

[NSMenu setItemArray:]: unrecognized selector sent to instance

因此,您无法设置/* Returns an array containing the receiver's menu items. This property is settable in macOS 10.14 and later. */ open var items: [NSMenuItem] ,而是使用其他api(menu.items = someItemsArraymenu.addItem(item)等)来解决此问题。

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

https://openradar.appspot.com/45517851