快速提问:
我正在使用MainWindowController
:
about = [[About alloc]init];
在课堂上关于我做我的初学者:
-(id)init{
if(!_viewAbout){
[NSBundle loadNibNamed:@"About" owner:self];
[NSApp beginSheet:self.viewAbout modalForWindow:*?????* modalDelegate:self didEndSelector:NULL contextInfo:NULL];
}
return self;
}
我的问题是窗口是在MainWindowController
中创建的。我的问题是如果类本身不知道主类,如何调用/发送消息给类的创建者?
答案 0 :(得分:0)
如果我理解正确的话,大多数班级都有self.superclass而且只有超级,比如
[super someMethod....
或
[self.superclass blegh....
或者您是否要求创建另一个班级的班级?如果是这种情况,你需要在另一个内部声明创建者类,一些(id)变量可以解决问题。
但是Mac上最流行的设计模式是委托模式,一旦你开始使用它,你就会喜欢它。声明委托通常是Cocoa和UIKit做事的方式,但其他编程语言可能不会。 Obj-C没有像python f.ex这样的神奇变量。具有。你有一个委托,或者你有一个声明的变量,你可以在init / alloc之后设置它。
你的(init)电话看起来也不正确。通常它看起来像:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Here you could declare your setting.
}
return self;
}
但我的观点是,如果你宣布一个单一的模式,你会在你的课堂上调用一个特定的方法,就像你在iOS / Cocoa上有很多类一样,如:
[someclass DefaultClass]
这将是你初始化的init类,除非之前已经声明了类,然后你才会返回对象。