Проблема связывания NSTableView - PullRequest
0 голосов
/ 29 апреля 2010

Я только что начал с XCode (v3.2.2) и Interface Builder и столкнулся с проблемой.

Вот что я сделал:

Я создал класс для источника данных NSTableView:

@interface TimeObjectsDS : NSControl {
  IBOutlet NSTableView * idTableView;
  NSMutableArray * timeObjects;
}
@property (assign) NSMutableArray * timeObjects;
@property (assign) NSTableView * idTableView;

- (id) init;
- (void) dealloc;

- (void) addTimeObject: (TimeObj *)timeObject;    

// NSTableViewDataSource Protocol functions
- (int)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView 
            objectValueForTableColumn:(NSTableColumn *)tableColumn row:
            (int)row;


@implementation TimeObjectsDS

@synthesize timeObjects;
@synthesize idTableView;

-(id) init {        
    if (self = [super init]) {
        self.timeObjects = [[NSMutableArray alloc] init];

        TimeObj *timeObject = [[TimeObj alloc] init];
        [timeObject setProjectId:11];
        [timeObject setDescription:@"Heja"];
        [timeObject setRegDate:@"20100331"];
        [timeObject setTimeSum:20.0];

        [timeObjects addObject:timeObject];     

        [timeObject release];

        [idTableView reloadData];        
    }

    return self;
}

- (void) dealloc {
    [idTableView release];
    [timeObjects release];
    [super dealloc];        
}
// Functions
- (void) addTimeObject: (TimeObj *)timeObject {
    [self.timeObjects addObject:timeObject];

    [idTableView reloadData];       
}   

// NSTableViewDataSource Protocol functions
- (int) numberOfRowsInTableView:(NSTableView *)tableView {

    return [self.timeObjects count];
}

- (id) tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row {

    return [[timeObjects objectAtIndex:row] description];
}
@end

Затем я связал свой NSTableView в представлении с этим источником данных следующим образом:

альтернативный текст http://www.og -entertainment.com / tmp / ib_datasource_bindings_big.png

Я также привязал View NSTableView к переменной Controller idTableView в Интерфейсном Разработчике, показанном выше

В функции init я добавляю элемент в изменяемый массив. Это правильно отображается в NSTableView, когда я запускаю приложение. Однако, когда я добавляю в массив другой элемент (того же типа, что и в init) и пытаюсь вызвать [idTableView reloadData] в представлении, ничего не происходит. Фактически Контроллер idTableView является нулевым. При печати переменной с NSLog (@ "idTableView:% @", idTableView) я получаю " idTableView: (null) "

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

1 Ответ

1 голос
/ 29 апреля 2010

Если ваша розетка с табличным представлением в вашем контроллере пуста, значит, вы не подключили ее в Интерфейсном Разработчике. На приведенном выше снимке экрана показано подключение к TimeObjectsDS, но это не значит много - это тот экземпляр, из которого вы звоните reloadData? Возможно, у вас есть несколько экземпляров этого класса, например.

Это только одна возможность. Без большего количества кода невозможно перечислить еще много.

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

...