如何向班级的大师班级发送消息?

时间:2013-08-02 18:34:08

标签: cocoa

快速提问:

我正在使用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中创建的。我的问题是如果类本身不知道主类,如何调用/发送消息给类的创建者?

1 个答案:

答案 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类,除非之前已经声明了类,然后你才会返回对象。