Код
TestMessage * messageTest = [TestMessage new];
необычен, в частности new
.Я собираюсь предположить, что new
это просто метод класса, который обычно alloc
/ init
эквивалентен
TestMessage * messageTest = [[TestMessage alloc] init];
Основная проблема заключается в том, что IBOutlet NSTextField *text
будет инициализирован, только если классTestMessage
загружается с файлом Nib.Он должен быть назван как класс объекта в Интерфейсном Разработчике, например,

, и вам нужно будет реализовать initWithCoder
и encodeWithCoder
примерно так вЧтобы извлечь значение вашего поля из кодировки IB:
- (instancetype)initWithCoder:(NSCoder *)coder {
self = [super initWithCoder:coder];
if (self) {
self.text = [coder decodeObjectForKey:@"text"];
}
return self;
}
-(void)encodeWithCoder:(NSCoder *)coder
{
[super encodeWithCoder:coder];
[coder encodeObject:self.text forKey:@"text"];
}
По сути, поля IBOutlet
не подключаются при создании экземпляра этого класса.Если бы они это сделали, как бы вы выразили, что поле A должно быть связано с объектом A интерфейса A, а поле B должно быть связано с объектом B интерфейса U?Соединение устанавливается только в контексте загрузки класса из файла Nib.