从ViewController调用AppController中的方法

时间:2012-05-23 10:53:47

标签: objective-c cocoa

我正在尝试为OSX Lion构建一个Cocoa应用程序。 我在AppController代码中有这一行:

self.viewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil appController:self];
[_view addSubview:[_viewController view]];
[[_viewController view] setFrame:[_view bounds]];

LoginViewController看起来像这样:

@implementation LoginViewController

@synthesize appController = _appController;

- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil appController:(AppController *)appController {

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        [self setAppController:appController];
        NSLog(@"Appcontroller init: %@", _appController);
    }    

    return self;
}

- (IBAction)login:(id)sender {

    NSLog(@"Appcontroller login: %@", _appController);
}

登录方法连接到按钮单击。

日志:

2012-05-23 12:45:49.574 QBLoader[3241:503] Appcontroller init: <AppController: 0x7fe2ab210440>
2012-05-23 12:45:52.085 QBLoader[3241:503] Appcontroller login: (null)

为什么第二个日志行为空?

1 个答案:

答案 0 :(得分:0)

由于您指出有多个LoginViewController实例,我会检查您的xib以查看您是否在任何地方创建了该类型的对象。特别是我将从xib开始,您可以在其中连接-login:动作。如果您只有AppController的一个实例,则常见的方法是在MainMenu.xib中创建对象,并将其附加到应用代理中的插座。然后,您可以使用[[NSApp delegate] appController]之类的内容来访问它。