首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Cocoa应用程序不能加载视图或在High Sierra上运行代码

Cocoa应用程序不能加载视图或在High Sierra上运行代码
EN

Stack Overflow用户
提问于 2019-01-31 11:04:24
回答 2查看 413关注 0票数 4

我在Mac AppStore上有一个应用程序,许多用户最近写道,它在High Sierra (可能是10.13.6,很难从他们那里提取具体信息)上不起作用。我设法在一个朋友的设备上重现了这个问题,但是我不能使用这个设备来构建Xcode等。

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

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

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

有没有人知道如何修复这个问题,或者我需要告诉我的用户更新他们的操作系统?

编辑:设法在高山上编译,视图仍然没有出现(在视图调试器中也没有任何迹象)。控制台显示:

代码语言:javascript
复制
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。在我的代码中,我没有显式地做控制台输出中描述的任何一件事。

EN

回答 2

Stack Overflow用户

发布于 2019-02-14 11:56:08

我在macOS 10.14上构建了一个简单的菜单栏应用程序,但在更早的操作系统版本上运行失败,也遇到了同样的错误:

[NSMenu setItemArray:]: unrecognized selector sent to instance

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

代码语言:javascript
复制
/* 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()等)来解决此问题。

这似乎是苹果在Xcode10中的疏忽,因为它没有警告你,它不能根据你的应用程序的部署目标进行设置。

https://openradar.appspot.com/45517851

票数 3
EN

Stack Overflow用户

发布于 2019-06-12 03:32:57

在我的例子中,gdub的答案是正确的!

然而,请注意,对我来说,这个问题并不是由窗口的主项目引起的(它确实是使用故事板设置的),但我们有一个弹出式按钮(NSPopupButton),它也使用了NSMenu,并且我们确实用NSMenu = ...而不是在循环中调用addItem()。这并不明显,因为它在一个内部定制的NSView中,所以我花了几个小时才把它挖掘出来。

我同意问题的根源是Xcode没有告诉你需要if @available 10.14来设置项目,但是为了解决这个问题,请检查你的代码,看看你是不是自己在某个地方设置了NSMenu.items,然后用addItem把它变成一个循环。你确实提到过你有弹出按钮(就像我们一样),所以我希望你能修复它,你的应用程序也能在10.13上再次工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54452717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档