Заполнение NSComboBox данными, сгенерированными в массиве иностранного класса

#arrays #cocoa #delegates #objective-c-2.0 #nscombobox

#массивы #cocoa #делегирует #objective-c-2.0 #nscombobox

Вопрос:

после моего последнего вопроса, касающегося доступа к массиву из другого класса, я столкнулся с новой проблемой, которая вызывает у меня головную боль уже три дня. Каждый раз, когда я думаю, что у меня есть правильный подход к решению, я терплю неудачу.

Хорошо… У меня пока нет большого опыта в программировании Cocoa. Но, может быть, вы сможете дать мне недостающую подсказку.

Позвольте мне показать вам, какой подход я выбрал:

1) объявление массива в классе PortConnection.h/.m

 @interface PortConnection : NSObject {
@private
    NSMutableArray *baudArray;
}
@property (nonatomic, retain) NSMutableArray *baudArray;
  

и синтезировать в .m

 @implementation PortConnection
@synthesize baudArray;
  

Затем я решил реализовать метод в ViewController, который должен отвечать за заполнение массива данными, необходимыми мне для отображения. Имя класса — «PortTableViewController.h».

 #import "PortConnection.h"

@interface PortTableViewController : NSObject <NSTableViewDataSource, NSComboBoxDataSource> {
@private
    IBOutlet NSComboBox *baudSelection;
    PortConnection *portConnection;
}

@property (assign) IBOutlet NSTableView *portTableView;

- (IBAction)fillBaudSelection:(id)sender;

@end
  

и реализация моего метода «fillBaudSelection».

 - (IBAction)fillBaudSelection:(id)sender {

    int baudCount = [portConnection.baudArray count];
    int i;

    for (i = 0; i <= baudCount; i  ){
        [baudSelection addItemWithObjectValue:[portConnection.baudArray objectAtIndex:i]];
    }
}
  

Кроме того, я реализовал методы делегирования для combobox.

 - (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index{
    return [portConnection.baudArray objectAtIndex:index];
}

- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox{
    return [portConnection.baudArray count];
}
  

Мои вопросы:

1) Нужно ли мне вообще использовать методы делегирования для поля со списком? 2) поле со списком вообще не заполнено данными, хотя массив заполнен данными 3) Я думаю, слишком сложно??

Большое спасибо за каждую подсказку, которую я получаю от вас!

с наилучшими пожеланиями, Себастьян

Ответ №1:

Вы уверены, что правильно подключили combobox? убедитесь, что делегату и источнику данных присвоены значения любого класса, в котором реализованы методы.

Комментарии:

1. Хорошо… Я не подключал combobox к классу в качестве делегата… Это тоже необходимо? Методы, которые я реализовал, соответствуют протоколу «NSComboboxdatasource». И это правильно реализовано, поскольку я проверил кнопку: «Использовать источник данных» в IB в настройках поля со списком