从另一个类调用时,NSMenu为null

时间:2012-09-23 09:01:20

标签: objective-c xcode nslog nsmenu appdelegate

我有一个状态栏应用程序的NSMenu,在AppDelegate.h中定义如下:

IBOutlet NSMenu *spotMenu; 

@property (nonatomic, retain) IBOutlet NSMenu *spotMenu;

在AppDelegate.m中就像这样:

[spotApp setMenu: spotMenu];


- (NSMenu *) spotMenu
{
return spotMenu;

}

我正试图从另一个类中访问它:

AnotherClass.h

@class AppDelegate;

AppDelegate *appD;

AnotherClass.m

#import "AppDelegate.h"

NSLog(@"%@", [appD spotMenu]);

返回null。

2012-09-23 10:23:37.543 Spot[581:303] (null)

当我在AppDelegate类中执行相同操作时:

NSLog(@"%@", spotMenu);

返回正确的内容:

2012-09-23 10:56:05.460 Spot[679:303] <NSMenu: 0x100618030>
Title: 
Supermenu: 0x0 (None), autoenable: YES
Items:     (
    "<NSMenuItem: 0x100618170 About Spot>",
    "<NSMenuItem: 0x10011b9b0 Preferences>",
    "<NSMenuItem: 0x1001b9390 >",
    "<NSMenuItem: 0x1001bbe70 >",
    "<NSMenuItem: 0x1001b99a0 Quit Spot>"
)

我可以从AppDelagate类获得与另一个类相同的输出吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

要访问您的App Delegate,您应该这样做:

AppDelegate* appD = (AppDelegate *)[[NSApplication sharedApplication] delegate];

AppDelegate* appD = (AppDelegate *)[NSApp delegate];

然后你可以从appD.spotMenu

中引用你的NSMenu