访问另一个类的文本字段

时间:2014-03-08 15:25:16

标签: objective-c cocoa

我想从另一个类访问文本字段。

我正在开发一个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它,因为主窗口只有一个实例。

1 个答案:

答案 0 :(得分:0)

alloc是一个为对象分配内存的类方法。因此,您已为新委托分配了内存,这不是您想要的。

一直到达您的应用代理是一个糟糕的模式,但要获得对您的代理的引用,您需要将代码更新为此。

AppDelegate *appDelegate = (id)[NSApplication sharedInstance].delegate;
NSString *test = appDelegate.tbxArtist.stringValue;