Извините, если это немного длинно, но я хочу быть как можно более информативным.
Я делаю тестовое приложение с несколькими классами и двумя файлами перьев (каждый класс является владельцем одного кончика). В одном из файлов пера есть текстовое поле, в другом - кнопка. Я пытаюсь записать все, что находится внутри текстового поля, когда нажата кнопка в другом виде пера, но она возвращает (ноль). В одном из классов (ViewClass) у меня есть это:
- (IBAction)startAction:(id)sender {
MyClass *anInstance = [[MyClass alloc] init];
NSString *string= [anInstance name];
NSLog(@"startAction logged: %@", string);
«Имя» является собственностью MyClass. То, что я хочу сделать, это установить «имя» в инициализации MyClass, таким образом, когда инициализируется anInstance, метод инициализации MyClass делает это:
- (id)init {
if ( self = [super init] ) {
[self setName:[nameInput stringValue]];
NSLog(@"init value: %@", name);
}
return self;
«NameInput» - это текстовое поле. Я думал , что вернулось бы все, что было в текстовом поле, но вместо этого я получил ноль Когда я использую setName:@"text"
, он проходит нормально, что-то не так с текстовым полем.
Ранее я делал это с моим собственным геттером, и в этом случае он не возвращал ноль, когда метод вызывался из его собственного класса, но если он был инициализирован и вызывался из другого класса, то он возвращал ноль, Я использовал это:
- (NSString *)name {
NSLog(@"nameMethod = %@", [nameInput stringValue]);
return [[[nameInput stringValue] retain] autorelease];
Таким образом, я могу сказать, что все настроено правильно, но что-то происходит, когда я запускаю MyClass из ViewClass и пытаюсь получить «name», которое постоянно говорит, что текстовое поле пустое.
Не уверен, поможет ли это, но перо с кнопкой принадлежит MyView (который является подклассом NSViewController), а текстовое поле принадлежит MyClass (подкласс NSObject).
Кто-то предположил, что поле не было должным образом связано, но если бы это было правдой, оно не сработало бы при вызове из его собственного класса, но это сработало. Кто-то еще упомянул, что это может быть проблема с инициализацией текстового поля на ноль, поэтому я попробовал вещь инициализации выше. Ни то, ни другое не сработало.
Спасибо за помощь.