以编程方式向上下文弹出菜单添加“最近打开”菜单

5

我有一个非文档Cocoa应用程序,带有菜单栏图标和状态菜单。我已经在Interface Builder中为状态菜单添加了一个“最近打开”菜单。填充菜单工作得很好:

[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:
            [NSURL fileURLWithPath:filename]]

现在我想要在上下文弹出菜单中添加第二个“最近打开”菜单。我该如何通过编程创建菜单,以便它像状态菜单中的版本一样自动填充条目?我尝试创建状态菜单中的副本,但它没有被填充。我认为NSDocumentController不知道此菜单(坦白说,我不知道它如何知道状态菜单中的那个)。
1个回答

2
作为参考,我找到了关于“最近打开”菜单内部工作原理的最佳文档: http://lapcatsoftware.com/blog/2007/07/10/working-without-a-nib-part-5-open-recent-menu/ 不幸的是,这对此并没有什么帮助,因为即使您像这样创建菜单,NSDocumentController也会忽略它。该菜单必须存在于主菜单中,在applicationDidFinishLaunching:之前调用,否则它将被忽略 - 因此,重复的菜单也将被忽略。
我最终做的事情,目前似乎起作用的是:
第一个想法是从主菜单中选择相应的NSMenu,并将其附加到其他菜单中,希望引用计数可以使其工作。没有这样的运气,如果子菜单已经在另一个NSMenuItem中,则setSubmenu会抛出错误。
所以我改变了子菜单的父项 - 当我需要在另一个菜单中显示它时,我将其从主菜单的最近打开项目中删除,并将其设置为新菜单中的子菜单。稍后,我再把它移回。这当然是一个丑陋的黑客方法,但它完成了工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接