Я только что начал с XCode (v3.2.2) и Interface Builder и столкнулся с проблемой.Проблема с привязкой NSTableView
Вот что я сделал:
Я сделал класс быть DataSource из 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 в представлении к этому источнику данных, как так:
alt text http://www.og-entertainment.com/tmp/ib_datasource_bindings_big.png
Я также связывал View NSTableView переменной контроллера idTableView в Interface Builder видели выше
В функции init я добавляю элемент в изменяемый массив. Это правильно отображается в NSTableView при запуске приложения. Однако, когда я добавляю еще один элемент в массив (того же типа, что и в init), и попробуйте вызвать [idTableView reloadData] в представлении ничего не происходит. Фактически контроллер idTableView имеет значение NULL. При печати переменной с NSLog (@ "idTableView:% @", idTableView) Я получаю "idTableView: (нуль)"
Im подножка из идей, как это исправить. Любые идеи о том, что я могу сделать, чтобы исправить привязку?
Большое спасибо за ваше время. Я добавил код реализации и исправил терминологию. У меня есть только один экземпляр TimeObjectDS, и я вызываю reloadData из него. –
Откуда вы вызываете свой метод? (это не функция). Если он вызывается перед awakeFromNib, тогда tableView будет по-прежнему нулевым. Более нормально создавать свойства объекта в качестве сохранения, а не назначать, но ваш код не является неправильным как таковой. Вы также несовместимы в своем использовании себя. ссылаться на свойства, но опять же, код не ошибается, и многие люди делают то же самое. –
Снова большое спасибо за ваше время. Я вызвал метод до awakeFromNib. –