これは変です。NSTableViewを学習するための非常に単純なプロジェクトがあり、それは私のペン先に設定され、ビューベースのtableViewとして設定されています。また、dataSourceを設定し、コントローラーオブジェクトに委任しました。
ただし、これを実行して実行すると、EXC_BAD_ACCESSが取得され、トレースはメイン関数で開始され、スタックの残りの部分はCocoaの内部にあります(コードではありません)。
このプロジェクトがARCを使用していることを除いて、実際には何も特別なことは行われていません(これは新しいプロジェクトであるため、これがデフォルトでした)。
また、Analyzerを使用して、どこでもメモリ管理が不適切に行われておらず、問題がないことを確認しました。
dataSource / delegateを設定しなくてもクラッシュは発生しませんが、明らかにこれはアプリを構築するための非常に良い方法ではありません。
何か案は?
編集
デリゲートとdataSourceは両方ともIBで設定されます。コードは次のとおりです(ビューベース)。注意することが重要です。このコードが存在するかどうかに関係なくクラッシュが発生します。どちらの場合も同じクラッシュです。
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return 5;
}
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
NSTextField *cell = [tableView makeViewWithIdentifier:@"MyView" owner:self];
if (nil == cell) {
cell = [[NSTextField alloc] initWithFrame:CGRectZero];
cell.identifier = @"MyView";
}
[cell setStringValue:[NSString stringWithFormat:@"Row %d", row + 1]];
return cell;
}