#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 в настройках поля со списком