2013-08-02 40 views
0

快速的問題:如何將消息發送到類的主類?

我創建從MainWindowController對象:

about = [[About alloc]init]; 

在Class關於我做我的初始化:

-(id)init{ 

    if(!_viewAbout){ 
     [NSBundle loadNibNamed:@"About" owner:self]; 
     [NSApp beginSheet:self.viewAbout modalForWindow:*?????* modalDelegate:self didEndSelector:NULL contextInfo:NULL]; 
    } 
    return self; 
} 

我的問題是,該窗口在創建MainWindowController。我的問題是如果類本身不知道主類,如何調用/發送消息給類的創建者?

+0

NSWindowControllers具有NSWindow的屬性(self.window) –

回答

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 /可可這麼多類的事情,這樣的:

[someclass DefaultClass] 

這將是你的init類,你會做init的地方,除非類已經被聲明過,然後你會返回對象。

相關問題