Cocoa用户界面加载问题

时间:2014-03-22 06:28:35

标签: objective-c cocoa interface-builder nib orsserialport

我是目标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对象之前调用该方法,或者让它们准备好可以工作......或者别的什么,但我不知道是什么。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

您应该在loadView方法中调用此方法:

- (void)loadView {
    [super loadView];
    [self RefreshSerialPortsInComboBox];
}

您的代码不起作用,因为视图和所有IBOutlet尚未在“init”方法中初始化。

答案 1 :(得分:0)

另一个完全相似的替代方法是实现方法awakeFromNib,为nib文件中表示的所有对象调用此方法。它在非正式协议中定义了NSNibAwaking