Я только что начал с 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) "
У меня заканчиваются идеи, как это исправить. Любые идеи, что я мог бы сделать, чтобы исправить привязку?