J'essaie de rendre l'objet compatible NSTableDataSource et de donner cet objet à NSTableView en tant que DataSource, mais lorsque la table essaie d'afficher des données, elle plante.NSArray avec des objets personnalisés dans NSTableDataSource
@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
Quelqu'un peut-il me dire quel pourrait être le problème?
À l'heure actuelle, j'ai supprimé tous les messages de release et de dealloc de ma classe, donc aucun objet n'est supprimé, j'ai fait conserver l'appel de message partout quand je transfère des données.
NSArrayDataSource* nsds = [[NSArrayDataSource alloc] initWithArray: myArray];
[tableView setDataSource:nsds];
je un doute, ne NSArray n'appelle [conserver] pour tous les objets tout en créant un nouvel objet ou il est tout simplement stocker des valeurs de pointeur? Supposons que le nom de mon objet est "SLProject" puis que je mette à jour les valeurs dans la fenêtre de débogage, mais dans la méthode de délégation tableView, le débogueur de internalArray affiche un objet de type "NSKVONotifying_SLProject" les adresses sont correctes.
Merci, je lisais la valeur de xml, et j'avais utilisé la propriété de commodité et c'était autorelease, j'ai fait la copie et cela a commencé à fonctionner. Merci. –