我正在尝试为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)
为什么第二个日志行为空?
答案 0 :(得分:0)
由于您指出有多个LoginViewController
实例,我会检查您的xib以查看您是否在任何地方创建了该类型的对象。特别是我将从xib开始,您可以在其中连接-login:
动作。如果您只有AppController
的一个实例,则常见的方法是在MainMenu.xib
中创建对象,并将其附加到应用代理中的插座。然后,您可以使用[[NSApp delegate] appController]
之类的内容来访问它。