對不起,如果它有點長,但我想盡可能描述。 我正在做一個包含幾個類和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。迄今爲止都沒有工作。
感謝您的幫助。
我將init中的東西移動到了awakeFromNib中,現在我不需要自己的getter方法。但是這個STILL只在ViewClass中使用時,我試圖使* anInstance =(...); [anInstance awakeFromNib];但是當從不同的類中調用它時,它仍然返回null。我遇到的真正問題是讓ViewClass告訴MyCLass返回文本字段中的名稱字符串。但感謝@Chuck的幫助。 – Elbimio
我想我明白你的意思,而不是隻是增加* anInstance不同的時間,我會嘗試實際做出幾個獨立的對象,所有的負載相同的筆尖 – Elbimio
@Elbimio:不,你不想讓他們全部加載一遍又一遍的筆尖。這將實例化在筆尖中的對象的許多副本,這也將與用戶正在與之交互的那些副本不同。你想獲得一個你已經創建的引用。 – Chuck