设置委托和懒惰实例化

时间:2016-02-26 20:25:32

标签: objective-c macos delegates

我有一个带有NSWindowController的应用程序和一个大多数时候都不需要的关联XIB(管理界面窗口),所以我想使用Lazy实例化。但是,我还需要设置'委托',即错误发生的时间。

我在AdminWindow,h(`NSWindowController'的子类)和.m文件中设置了所有内容。

在我的主控制器中,MainController(NSObject的子类)我有以下工作代码。

@interface MainController : NSObject<AdminWindowDelegate>{
   AdminWindow *myAdminWindow;
}

@implementation MainController

-(id)init{
  myAdminWindow = [[AdminWindow alloc] init];
  [myAdminWindow setDelegate:self];

}

-(IBAction)openAdminWindow:(id)sender{

 [myAdminWindow showWindow:nil];
}

所以一切正常,但我不想在需要之前实例化myAdminWindow,认为懒惰的实例化会起作用。

改变MainController:

 @implementation{

 -(AdminWindow *) myAdminWindow{

 if(!_myAdminWindow){

 _myAdminWindow = [[AdminWindow alloc] init];

 //Tried to set delegate here, but does not work

}

-(IBAction)openAdminWindow:(id)sender{

 [self.myAdminWindow showWindow:nil];
}

我在哪里设置代理?我在myAdminWindow的'alloc''init'之后尝试过,但是它不起作用。当我开始输入命令

 _myAdminWindow.setDe...  Xcode gives nothing, .setDelegate or .delegate are not options.

我试过

 [_myAdminWindow setDelegate   Nope, does not work either.

离开委托部分,其他一切按预期工作。

问题:使用延迟实例化时,我在哪里设置委托?怎么样?

提前谢谢

=== [编辑] ===

如果其他人有同样的问题。

感谢Phillip Mills的回复和提醒。

我在@interface的{​​{1}}中删除了以下声明:

MainController

并在 AdminWindow *myAdminWindow; 的{​​{1}}部分中将myAdminWindow声明为MainController - 并且一切都很好!

0 个答案:

没有答案