ココアでビューベースのTableViewを扱っています。tableview データ ソース メソッドでは、関連するオブジェクトのタイプに基づいて 3 つの異なるセルを作成したいと考えています。
私のアイデアは、if ステートメントの前にセルのジェネリック id 変数を作成し、if 内の適切なセル型にキャストして、関連するオブジェクトをイントロスペクションすることでした。残念ながら、このメソッドでは、xcode は、ジェネリック セル変数に、内部に設定しようとしているプロパティがないことを訴えます。前の行で行ったキャストを認識しません。
これは非常に基本的な質問であることは承知していますが、objective-c/cocoa でこの問題を解決する通常のパターンは何ですか。
データ ソース メソッドのコードは次のとおりです。
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
GeneralVector *vector = [self.vectors objectAtIndex:row];
id cellView;
if ([[self.vectors objectAtIndex:row] isKindOfClass:[Vector class]]) {
cellView = (VectorTableCellView *)[tableView makeViewWithIdentifier:@"vectorCell" owner:self];
cellView.nameTextField.stringValue = vector.name;
} else if ([[self.vectors objectAtIndex:row] isKindOfClass:[NoiseVector class]]) {
cellView = (NoiseVectorTableCellView *)[tableView makeViewWithIdentifier:@"noiseVectorCell" owner:self];
} else {
cellView = (ComputedVectorTableCellView *)[tableView makeViewWithIdentifier:@"computedVectorCell" owner:self];
}
return cellView;
}