我想从另一个类访问文本字段。
我正在开发一个Mac应用程序。我的主窗口在MainMenu.xib
中定义,由AppDelegate
类控制。在我的窗口中,我有一个文本字段tbxTest
。在AppDelegate.h
中,这被定义为:
@property (weak) IBOutlet NSTextField *tbxTest;
在AppDelegate.m
:
@synthesize tbxTest;
现在,假设我的其他窗口由MyWindowController
(:NSWindowController
)控制。在这个窗口我有一个按钮。单击此按钮时要调用的方法是btnClose
。
在MyWindowController.h
:
- (IBAction)btnClose:(id)sender;
在MyWindowController.m
:
#import "AppDelegate.h"
...
- (IBAction)btnClose:(id)sender
{
AppDelegate *appDelegate = [AppDelegate alloc];
NSString *test = appDelegate.tbxArtist.stringValue;
if (test != nil)
{
NSLog(@"test is%@", test);
}
else
{
NSLog(@"test is nil");
}
}
不幸的是,test
总是 nil
。
我该怎么做?我打赌它与这一行有关:AppDelegate *appDelegate = [AppDelegate alloc];
,但我无法在谷歌上找到有关它的任何信息。我不想init
它,因为主窗口只有一个实例。
答案 0 :(得分:0)
alloc
是一个为对象分配内存的类方法。因此,您已为新委托分配了内存,这不是您想要的。
一直到达您的应用代理是一个糟糕的模式,但要获得对您的代理的引用,您需要将代码更新为此。
AppDelegate *appDelegate = (id)[NSApplication sharedInstance].delegate;
NSString *test = appDelegate.tbxArtist.stringValue;