Проблемы с загрузкой пользовательского интерфейса Какао
Я нуб на цели C, поэтому извините, если я не использую правильные термины для описания моей проблемы, но мне нужна рука, и SO - мой наименьший ресурс!
Я пытаюсь связать баланс Arduino с моим Mac с помощью целевого программного обеспечения C, в котором у меня есть Nib-файл и один контроллер: для этого я использую ORSSerialPort, который работает нормально.
У меня возникают некоторые проблемы при загрузке NSCombobox (с помощью которого я могу выбрать последовательный порт для пользователя) после загрузки интерфейса пользователя: в моем классе контроллера у меня есть метод "InitializeView", который вызывает этот метод:
-(void)RefreshSerialPortsInComboBox{
//Clear all existing elements
for (int i = 0; i < [self.serialPortsComboBox numberOfItems]; i++) {
[self.serialPortsComboBox removeItemAtIndex:i];
}
//Reload the serial ports list
NSArray *availableSerialPorts = [[NSArray alloc] initWithArray:[serialPortManager availablePorts]];
//Reload the Combobox elements with the new serial ports list
for (int i = 0; i < [availableSerialPorts count]; i++) {
[self.serialPortsComboBox addItemWithObjectValue:[[availableSerialPorts objectAtIndex:i] valueForKey:@"_path"]];
[self InsertTextInBufferTextView:@"Elemento creato...\n"];
}
}
Проблема заключается в том, что если я вызываю этот метод в методе init объекта контроллера, это не работает, и список элементов комбинированного списка все еще пуст: обратите внимание, что контроллер создан Interface Builder.
Я попытался связать вышеупомянутый метод с кнопкой, и она работает, поэтому кажется, что это вопрос приоритета загрузки, кажется, что я собираюсь вызвать метод перед загрузкой объектов пользовательского интерфейса или подготовкой их к работе. или что-то еще, но я не знаю что.
Кто-нибудь может мне помочь?
2 ответа
Еще одна аналогичная альтернатива только для полноты картины - реализовать метод awakeFromNib, этот метод вызывается для всех объектов, представленных в файле пера. Это определено в неофициальном протоколе NSNibAwaking
Вы должны вызвать этот метод в методе loadView:
- (void)loadView {
[super loadView];
[self RefreshSerialPortsInComboBox];
}
Ваш код не работает, потому что view и все IBOutlets еще не инициализированы в методе "init".