0

我是目标 C 的菜鸟,所以如果我没有使用正确的术语来描述我的问题,我很抱歉,但我需要帮助,所以这是我最少的资源!

我正在尝试将 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 实例化的。

我试图将上述方法链接到一个按钮并且它可以工作,所以这似乎是加载优先级的问题,似乎我要在加载 ui 对象或让它们准备好工作之前调用该方法.. .或者也许是别的东西,但我不知道是什么。

有人能帮我吗?

4

2 回答 2

0

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

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

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

于 2014-03-22T06:56:48.053 回答
0

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

于 2014-03-22T07:42:47.057 回答