我在Mac AppStore上有一个应用程序,最近有很多用户写信说它在High Sierra上不起作用(可能是10.13.6,很难从中提取特定信息)。我设法在朋友的设备上重现该问题,但是无法使用该设备与Xcode等进行构建。
问题似乎是NSViewController
根本没有加载它的子视图! should have dropdowns and buttons in it下显示的灰色视图控制器。
我还注意到关闭灰色窗口不会关闭红色透明窗口-在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
。我没有明确执行代码中控制台输出中描述的任何事情。
答案 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 = someItemsArray
,menu.addItem(item)
等)来解决此问题。
这似乎是Apple在Xcode 10中的一个疏忽,因为它没有警告您无法根据应用程序的部署目标对其进行设置。