Проблемы с загрузкой пользовательского интерфейса Какао

Я нуб на цели 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".

Другие вопросы по тегам