2009-09-27 78 views
1

我的問題可能有點愚蠢,但爲什麼不能在IB中實例化任何對象,例如按鈕點擊?我的意思是我可以將自己的對象添加到xib中,並將出口鏈接到cotrols並將對象的操作控制到對象的方法,但是一旦我按下按鈕,所有對象都崩潰(不知道選擇器)。處理動作的任意對象?

你們有什麼暗示嗎?

編輯:代碼,如要求:在IB

@interface TextController { 
    IBOutlet UILabel * textLabel; 
    IBOutlet UITextField * textField; 
} 

-(IBAction)buttonClicked:(id)sender; 

@end 

@implementation TextController 

-(IBAction)buttonClicked:(id)sender { 
    textLabel.text = @"Ololo"; 
} 

@end 

連接正常,只是相信我。它真的很難讓他們錯了所有這些drag'n'drop東西:)

編輯2: TextController不是文件的所有者(在這種情況下,它工作正常)。但是,我只想了解爲什麼我不能將某個動作連接到某個對象(可能甚至不是UIViewController的子類)。

+1

發佈確切的錯誤。 – Chuck 2009-09-27 21:30:46

回答

2

您可以將插座和操作連接到筆尖文件中的任何對象。將庫調色板中的NSObject拖放到Interface Builder中的nib文件中。然後轉到信息選項板的標識選項卡並設置您的對象的類。

這樣你就可以從你的筆尖實例化任何類的任何對象。如果要掛鉤的目標是從nib文件靜態創建的。確保文件的所有者至少有一個對象的引用,否則一旦創建它就會被釋放。發送者不保留目標。

如果您要掛鉤的對象不應該從您的筆尖靜態創建,那麼在實例化nib文件的類中實現awakeFromNib,並在代碼中掛接目標。

最後一種選擇是,如果您在nib文件中根本沒有您自己的任何子類。然後在您的UIViewController子類中實現initWithNibName:bundle:,並在調用超級實現後在代碼中掛接目標。

+1

啊,夥計,你救了我的大腦!謝謝,真的。當XIB工作如何在我面前破滅時,我正要放棄編程。這個問題真的是關於內存管理。廢話,爲什麼我不知道這個?.. – Anton 2009-09-28 19:44:47

0

郵政編碼,這通常意味着你沒有正確連接你的連接。 IB中的文件所有者TextController?

+0

更新了帖子 – Anton 2009-09-27 21:23:17

+0

不,他不是,我不希望它成爲一個文件所有者。爲什麼我不能將一些動作映射到任意對象? P.S.當然,映射到文件所有者的確很好。 – Anton 2009-09-28 08:11:50