菜单栏菜单条目在一段时间后被禁用

时间:2012-02-29 14:47:54

标签: objective-c cocoa

我的应用程序位于Mac的菜单栏中,其中包含用于控制应用程序的菜单项。应用程序运行一段时间后没有交互,所有菜单项都将被禁用。 “修复”菜单的唯一方法是再次启动应用程序(当它已经运行且不退出应用程序时),菜单条目将再次启用。

我的问题的原因是因为我宣布这个菜单的IBOutlet很弱而且它应该很强大?或者这可能是另一个原因吗?

3 个答案:

答案 0 :(得分:1)

我是一个类似的应用程序的作者,它位于菜单栏中,我已经能够长时间保持运行而不会看到您所描述的问题。虽然我不确切知道是什么原因造成了你的问题,但我可以说我使用了一个强大的IBOutlet引用来表示我的NSMenu似乎工作正常。

答案 1 :(得分:1)

NSMenuS自动验证NSMenuItems。如果任何项目目标为零,或者任何目标没有响应预期的消息,则会自动禁用它。要覆盖此行为,请在NSMenu子类中实现validateMenuItem :.但是要小心,因为通常在禁用NSMenuItems时,这通常意味着消息的目标已经被释放,或者不再可用。

答案 2 :(得分:1)

如果您在Mac OS X上使用ARC,那么当您为笔尖中的顶级对象创建出口时,必须使用strong引用。如果不这样做,对象将被释放。

在iOS上,由于UIViewController的工作方式不同,您应该使用weak引用。