2011-08-09 46 views
0

對不起,如果它有點長,但我想盡可能描述。 我正在做一個包含幾個類和2個nib文件的測試應用程序(每個類是一個nib的擁有者)。一個nib文件有一個文本框,另一個有一個按鈕。我試圖在按下另一個nib視圖中的按鈕時記錄文本字段內的任何內容,但它返回(null)。在其中一個類(ViewClass)我有這樣的:可可textfield返回null

- (IBAction)startAction:(id)sender { 
MyClass *anInstance = [[MyClass alloc] init]; 
NSString *string= [anInstance name]; 
NSLog(@"startAction logged: %@", string); 

「名稱」是MyClass的屬性。我想要做的是有「名」 MyClass中,這樣一來,在初始化設置時anInstance初始化時,MyClass的init方法做到這一點:

- (id)init { 
if (self = [super init]) { 
    [self setName:[nameInput stringValue]]; 
    NSLog(@"init value: %@", name); 
} 
return self; 

「NameInput」是文本框。我認爲這將返回無論在文本字段中,但我得到null。當我使用setName:@"text"時,它傳遞的很好,所以文本字段出現問題。

我以前這樣做我自己的吸氣劑,在這種情況下,它沒有返回時,該方法已經從它自己的類名爲空,但如果它是從其他類進行初始化和調用,然後返回null ,我用這個:

- (NSString *)name { 
NSLog(@"nameMethod = %@", [nameInput stringValue]); 
return [[[nameInput stringValue] retain] autorelease]; 

這樣一來,我可以告訴它是所有正確設置,但有事情發生時,我從viewClass類初始化MyClass的,並試圖讓「名」,它口口聲聲說該文本字段爲空。

不確定是否有幫助,但帶按鈕的筆尖屬於MyView(它是NSViewController的子類),並且文本字段屬於MyClass(NSObject的子類)。

有人建議該字段沒有正確關聯,但如果這是真的,從它自己的類中調用它時它不會工作,但它確實如此。有人提到它可能是一個問題,文本字段被初始化爲零,所以我嘗試了上面的init。迄今爲止都沒有工作。

感謝您的幫助。

回答

5

IBOutlets不保證掛鉤直到awakeFromNib,這是在對象的init方法運行之後。你需要在awakeFromNib中做你的筆尖設置。

現在就編輯我是GOTTEN HOME:對不起,我之前沒有仔細閱讀過。我上面所說的是真實的,但也存在更深層次的問題。我現在看到你也在處理兩個不同的對象 - 一個在筆尖,一個在代碼中創建。如果在一個帶有插座的nib中有一個對象連接到一個接口元素,那麼不會使該類的其他對象也具有指向該元素的實例變量。兩個獨立創建的MyClass實例不會共享相同的實例變量,而不會超過程序中的每個NSArray擁有相同的一組項目。如果你想使用nib中的實例,你需要使用那個實例。

你如何做到這一點是你如何構建你的程序。沒有簡單的[self magicallyGetObjectFromNib]。不知何故,一個物體需要找到另一個物體(比如通過了解筆尖的所有者),或者通過一個知道它們的物體告訴另一個物體。

+0

我將init中的東西移動到了awakeFromNib中,現在我不需要自己的getter方法。但是這個STILL只在ViewClass中使用時,我試圖使* anInstance =(...); [anInstance awakeFromNib];但是當從不同的類中調用它時,它仍然返回null。我遇到的真正問題是讓ViewClass告訴MyCLass返回文本字段中的名稱字符串。但感謝@Chuck的幫助。 – Elbimio

+0

我想我明白你的意思,而不是隻是增加* anInstance不同的時間,我會嘗試實際做出幾個獨立的對象,所有的負載相同的筆尖 – Elbimio

+0

@Elbimio:不,你不想讓他們全部加載一遍又一遍的筆尖。這將實例化在筆尖中的對象的許多副本,這也將與用戶正在與之交互的那些副本不同。你想獲得一個你已經創建的引用。 – Chuck

0

當您嘗試從同一對象中的字段中提取值並顯然希望初始化它時,您正處於init例程中。 '不會發生。

+0

將它移動到awakeFromNib仍然沒有解決從另一個類被調用時不工作的問題。 – Elbimio

+0

對象實例是否連接到您想要訪問的字段?我猜不是。檢查'nameInput'你參考它 - 我敢打賭它是零。 –

相關問題