Я пытаюсь создать объект, совместимый с NSTableDataSource, и передать этот объект NSTableView как DataSource, однако, когда таблица пытается отобразить данные, происходит сбой.
@interface NSArrayDataSource : NSObject{
NSArray* internalArray;
}
-(id) initWithArray: (NSArray*) objects;
-(int)numberOfRowsInTableView:(NSTableView *)aTableView;
-(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
-(void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
@end
@implementation NSArrayDataSource
-(id) initWithArray: (NSArray*) objects{
if(self = [super init])
{
internalArray = [[NSArray alloc] initWithArray:objects];
}
return self;
}
-(int)numberOfRowsInTableView:(NSTableView *)aTableView{
return [internalArray count];
}
-(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex{
id obj = [internalArray objectAtIndex:rowIndex];
// when I debug, I get same pointers with invalid data
// each object has "name" message
// this following line gives invalid pointer and
// it crashes
return [obj name];
}
-(void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex{
}
@end
Может кто-нибудь сказать мне, в чем может быть проблема?
В данный момент я удалил все сообщения об освобождении и освобождении из своего класса, поэтому ни один объект не был удален. Я сделал все возможное, чтобы сохранить вызов сообщения везде, когда я передаю данные.
NSArrayDataSource* nsds = [[NSArrayDataSource alloc] initWithArray: myArray];
[tableView setDataSource:nsds];
У меня есть одно сомнение: NSArray вызывает [retain] для каждого объекта при создании нового объекта или просто хранит значения указателя?
Предположим, что имя моего объекта - "SLProject", тогда когда я отлаживаю, в методе init я правильно вижу значения в окне отладки, но в методе делегирования tableView отладчик internalArray отображает объект типа "NSKVONotifying_SLProject", и они указывают на недопустимые данные, однако адреса верны.