我是目标C的菜鸟,所以我很抱歉,如果我没有使用正确的术语来描述我的问题,但我需要一只手,这是我最少的资源!
我尝试使用客观的C软件将Arduino天平与我的mac接口,其中我有一个Nib文件和一个控制器:为此我使用ORSSerialPort运行正常。
我在加载用户界面后加载NSCombobox(我让用户可以选择串口的那个)时遇到一些问题:在我的控制器类中,我有一个名为" InitializeView&的方法#34;它调用这种方法:
-(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实例化。
我试图将上面的方法链接到一个按钮,它的工作方式似乎是加载优先级的问题,似乎我要在加载ui对象之前调用该方法,或者让它们准备好可以工作......或者别的什么,但我不知道是什么。
有人可以帮助我吗?
答案 0 :(得分:0)
您应该在loadView方法中调用此方法:
- (void)loadView {
[super loadView];
[self RefreshSerialPortsInComboBox];
}
您的代码不起作用,因为视图和所有IBOutlet尚未在“init”方法中初始化。
答案 1 :(得分:0)
另一个完全相似的替代方法是实现方法awakeFromNib,为nib文件中表示的所有对象调用此方法。它在非正式协议中定义了NSNibAwaking