-1

AppDelegate.hで次のように定義されたステータスバーアプリのNSMenuがあります。

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クラスと同じ出力を別のクラスから取得する方法はありますか?

ありがとうございました。

4

1 に答える 1

0

App Delegate にアクセスするには、次のようにする必要があります。

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

また

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

次に、 appD.spotMenu から NSMenu を参照できます

于 2012-09-23T09:09:31.720 に答える