Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa ApplicationIDFinishLaunching:从NIB加载NSDocument后执行_Cocoa_Macos_Menuitem_Nsdocument - Fatal编程技术网

Cocoa ApplicationIDFinishLaunching:从NIB加载NSDocument后执行

Cocoa ApplicationIDFinishLaunching:从NIB加载NSDocument后执行,cocoa,macos,menuitem,nsdocument,Cocoa,Macos,Menuitem,Nsdocument,也许我的理解是错误的,但在我的应用程序中,我有可加载的bundle,可以将NSMenuItem条目添加到主菜单中 我遍历所有包,确定要添加哪些菜单项,然后相应地添加它们 现在的问题是,在基于文档的应用程序中,这些代码应该放在哪里 最初我把它放在我的NSDocument子类'-WindowControllerIDloadNib:方法中,但这有一个不希望出现的副作用,即重复相同的项目n次,其中n是我打开的文档数(也就是说,它不是一个放置代码的地方) 因此,我尝试将代码放入我的nsapplicatio

也许我的理解是错误的,但在我的应用程序中,我有可加载的bundle,可以将
NSMenuItem
条目添加到主菜单中

我遍历所有包,确定要添加哪些菜单项,然后相应地添加它们

现在的问题是,在基于文档的应用程序中,这些代码应该放在哪里

最初我把它放在我的NSDocument子类'
-WindowControllerIDloadNib:
方法中,但这有一个不希望出现的副作用,即重复相同的项目
n
次,其中
n
是我打开的文档数(也就是说,它不是一个放置代码的地方)

因此,我尝试将代码放入我的
nsapplicationedelegate
-applicationdFinishLaunching:方法中,这确实意味着它只运行一次,但我面临一个问题,即文档在执行
-applicationdFinishLaunching:
之前(或至少在完成之前)弹出并显示


通常,在哪里放置代码,以便在启动时将菜单项动态添加到基于文档的应用程序?

为创建/打开的每个文档调用
-windowcontrolleridloadnib:
方法。这是更高的应用程序级别,所以文档不应该担心这一点


使用委派方法在显示时更新菜单如何?这样,您的应用程序就可以简单地维护它在启动时创建的列表,并保持菜单的更新。或者,您可以将其放入应用程序代理的
-awakeFromNib
方法中。

为创建/打开的每个文档调用
-windowcontrolleridloadnib:
方法。这是更高的应用程序级别,所以文档不应该担心这一点


使用委派方法在显示时更新菜单如何?这样,您的应用程序就可以简单地维护它在启动时创建的列表,并保持菜单的更新。或者,您可以将其放入应用程序代理的
-awakeFromNib
方法中。

-menuedsupdate:看起来很有用,谢谢。但是,在多文档应用程序(如我的)中,每个文档都希望对菜单进行更改,这将如何发挥作用呢?它是一个委托,而不是一个通知,因此多个对象可以响应,这似乎有很大的局限性。当用户在文档之间切换时,我需要调整各种菜单项的状态。似乎已发送
NSMenuDidBeginTrackingNotification
。我的坏:)那么你的文档对插件菜单的状态有发言权?我想你需要更详细地澄清你的问题。嗨。。。我最初的问题纯粹是关于启动时在菜单上“添加”项目的位置。我希望所有项目始终可导航,但在文档激活它们之前将其禁用。我的问题现在有点变成了一个关于在用户在文档之间切换时启用/禁用菜单项的问题。我应该开始一个新问题,威尔,谢谢:)新问题添加到这里:-菜单更新日期:看起来很有用,谢谢。但是,在多文档应用程序(如我的)中,每个文档都希望对菜单进行更改,这将如何发挥作用呢?它是一个委托,而不是一个通知,因此多个对象可以响应,这似乎有很大的局限性。当用户在文档之间切换时,我需要调整各种菜单项的状态。似乎已发送
NSMenuDidBeginTrackingNotification
。我的坏:)那么你的文档对插件菜单的状态有发言权?我想你需要更详细地澄清你的问题。嗨。。。我最初的问题纯粹是关于启动时在菜单上“添加”项目的位置。我希望所有项目始终可导航,但在文档激活它们之前将其禁用。我的问题现在有点变成了一个关于在用户在文档之间切换时启用/禁用菜单项的问题。我应该开始一个新问题,并将,谢谢:)新问题添加到这里: