NSTableDataSource互換オブジェクトを作成し、このオブジェクトをDataSourceとしてNSTableViewに渡そうとしていますが、テーブルがデータを表示しようとするとクラッシュします。NSTableDataSourceでカスタムオブジェクトを持つNSArray
@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];
私は1つの疑問を持っているが、NSArrayのは、すべてのオブジェクトに対して、[保持]を呼び出すんでしょうか?
私のオブジェクトの名前が "SLProject"であるとすると、デバッグ時にinitメソッドで値が正しく表示されますが、tableView委譲メソッドでinternalArrayのデバッガが "NSKVONotifying_SLProject"型のオブジェクトを表示し、アドレスは正しいです。
ありがとう、私はxmlから値を読み取っていた、私は便利なプロパティを使用していた、それはautoreleaseだった、私はコピーし、それが働き始めた。 ありがとうございます。 –