0

快速问题:

我正在创建一个对象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;
}

我的问题是 Window 是在MainWindowController. 我的问题是如果班级本身不知道大师班,如何呼叫/发送消息给班级的创建者?

4

1 回答 1

0

如果我理解正确的话,大多数类都有 self.superclass 和 super,比如

[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 类,您将在其中执行 init,除非该类之前已声明,然后您只需返回该对象。

于 2013-08-02T19:07:43.753 回答