我有一个带有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
- 并且一切都很好!