0

我正在尝试为 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)

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

4

1 回答 1

0

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

于 2012-05-23T12:18:46.160 回答