2011-08-05 17 views
0

をクラッシュ、私は次のコントローラを持っている:NSTableView作らデリゲートとデータソース接続で

#import <Foundation/Foundation.h> 

@interface KextTable : NSObject <NSTableViewDataSource> { 
@private 
    NSArray *klist; 
} 
- (int)numberOfRowsInTableView:(NSTableView *)tableView; 
- (id)tableView:(NSTableView *)tableView 
objectValueForTableColumn:(NSTableColumn *)tableColumn 
      row:(int)row; 
@end 

#import "KextTable.h" 


@implementation KextTable 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
}  
    return self; 
} 

-(void) awakeFromNib 
{ 
    klist = [[NSArray alloc] init]; 

    klist = [NSArray arrayWithObjects: @"1", @"2", 
      @"3", @"4", nil]; // debugging values only 
} 

- (void)dealloc 
{ 
    [super dealloc]; 
} 

- (int)numberOfRowsInTableView:(NSTableView *)tableView 
{ 
    return [klist count]; 
} 

- (id)tableView:(NSTableView *)tableView 
objectValueForTableColumn:(NSTableColumn *)tableColumn 
      row:(int)row 
{ 
    return [klist objectAtIndex:row]; 
} 

@end 

とビューがある場合、このコードは私のメインのインターフェース制御に EXC_BAD_ACCESSでクラッシュしますテーブルビューを含むタブに切り替えました。なにが問題ですか?

(私はそれが動作objectValueForTableColumnで配列を作成する場合の接続は、右であることを知っている)

+0

がありますので注意してください

klist = [[NSArray arrayWithObjects: @"1", @"2", @"3", @"4", nil] retain]; 

:だからで追加する必要がありますあなたのデータソースメソッドは 'int'ではなく' NSInteger'を取って返すべきです。 –

答えて

2

あなたが作成しているklistを(デバッグ1)は、それを自動解放コンストラクタを使用しているためです。あなたが何をやったかでメモリリーク(あなたが何か他のものにNSArrayのと再度割り当てる変数を作成...)

+2

そして 'dealloc'で配列を解放することを忘れないでください。または、プロジェクトを切り替えてARCを使用します。 'retain'が不要(または使用可能)になり、' dealloc'メソッドは必要ありません。 –

関連する問題