2013-03-11 96 views
2

我設置了窗口的父屬性,當我檢查windowDidLoad中的屬性時,一切都很好。但是當我在IBAction中檢查它時,它是零。我在這裏錯過了什麼?物業IBAction失去價值

AppController.m

loginController = [[LoginController alloc] initWithWindowNibName:@"Login" owner:self]; 
loginController.parent = self; 
[[loginController window] makeKeyAndOrderFront:self]; 

LoginController.h

@property (nonatomic, weak) AppController *parent; 

LoginController.m @synthesize父母;

- (void)windowDidLoad 
{ 
    [super windowDidLoad]; 

    NSLog(@"Parent: %@", self.parent); //<--- Parent: <AppController: 0xblahblah> 
} 

- (IBAction)login:(id)sender 
{ 
    NSLog(@"Parent: %@", self.parent); //<--- nil 
} 

enter image description hereenter image description hereenter image description hereenter image description hereenter image description here

+1

如果loginController不是弱屬性,那麼存在一個保留週期,因爲AppController持有一個強指向LoginController的指針,反之亦然。 – 2013-03-11 20:38:54

+0

@RamyAlZuhouri我把它當成了弱點,並將它切換到上面,看看它是否有所作爲。 – Bot 2013-03-11 21:09:26

+0

你有沒有注意到有什麼區別? – 2013-03-11 21:28:43

回答

2

我認爲你的問題只是你設置了錯誤的文件所有者,是擁有xib文件的登錄控制器,因此它擁有所有的IBOutlets和IBActions綁定。

呼叫initWithWindowNibName:不是initWithWindowNibName:老闆:,使文件所有者將是新創建的登錄控制器,而不是應用程序控制器:

loginController = [[LoginController alloc] initWithWindowNibName:@"Login"]; 

編輯

就像我懷疑,你有兩個單獨的登錄控制器實例,你認爲只有一個。見XIB文件:

enter image description here

的廈門國際銀行文件對象「登錄控制器」,創建登錄控制器的另一個實例。這與您在應用程序控制器中分配的實例不同。

的解決方案是讓家長是一個IBOutlet:

@property (nonatomic, weak) IBOutlet AppController *parent; 

而對於不應用控制器分配它,它會自動從廈門國際銀行文件加載。 您只需要將其綁定到xib文件中的登錄控制器實例(如果文件所有者是應用程序控制器,則應該按住Ctrl鍵將父屬性拖動到對象圖標,告訴我如果遇到問題它)。所以這就是爲什麼它打印出null的原因:該動作由另一個對象處理,該對象沒有初始化父屬性。

+0

我掏出'owner:self',在'IBAction'中它仍然是'nil' – Bot 2013-03-11 21:42:45

+0

這個答案的後半部分是正確的。您正在創建兩個LoginController實例:一個在筆尖中,另一個在應用程序控制器中。製作一個實例並與其他需要它的對象共享。 – paulmelnikow 2013-03-11 23:34:13

+0

這個案例問題的第一部分不適用。 – 2013-03-11 23:43:45

1

在viewDidLoad中訪問伊娃叫parent。 登錄:您訪問財產self.parent。 這可以是相同的,也可以是不同的。

您是否@synthesize的財產?如果是這樣,沒有任何額外的選擇?那你應該沒問題。父母和self.parent應該是一樣的東西。

您是否自動合成它?那沒問題。但是相應的iVar被稱爲_parent。這意味着你必須有一個額外的伊娃parent這是不一樣的伊娃。

將所有聲明添加到您的問題以獲取更多詳細信息。

+0

我已經嘗試了兩個。不過,我上面有最新的編輯。 – Bot 2013-03-11 21:12:09