0

以下是委托的 viewForTableColumn 方法中的内容。我根据列表视图中的选择在数据源中动态创建表列。

    NSDictionary* rowData = [[self tableData] objectAtIndex:row];
    NSString* identifier = [tableColumn identifier];

    NSTableCellView* result = [tableView makeViewWithIdentifier:@"myCellView" owner:self];
    if (result == nil) {
        result = [[NSTableCellView alloc] initWithFrame:NSMakeRect(0, 0, 90.0, 10.0)];
        _textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 90.0, 10.0)];
        [result setTextField:_textField];
        [[result textField] setStringValue:[rowData objectForKey:identifier]];
    }
    else {
        [[result textField] setStringValue:[rowData objectForKey:identifier]];
    }
    NSLog(@"result text field: %@", [[result textField] stringValue]);

    return result;

现在在

-(void)tableView:(NSTableView *)tableView didAddRowView:(NSTableRowView *)rowView             forRow:(NSInteger)row {
NSLog(@"did add: %ld", row);
NSTableCellView* aView = [rowView viewAtColumn:0];
NSLog(@"%@", [[aView textField]stringValue]);
NSLog(@"%@",[[[rowView viewAtColumn:0 ] textField] stringValue]);
}

textField 是僵尸。是什么赋予了?谢谢你的帮助。

4

2 回答 2

1

必须在窗口控制器中获取 NSTableCellView 的引用(IBOutlet)。仅此而已,没有别的。现在我可以通过它在 NSTableView 委托中的标识符来访问它;即使在删除所有列并将新列添加到 tableview 之后,引用也会保留。

现在在 300-3000 行的表上处理非常糟糕的 tableview 性能!那是另一天。

于 2013-11-17T00:30:44.787 回答
0

我唯一能想到的是,当你这样做时:

_textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 90.0, 10.0)];

你正在释放之前在_textField.

于 2013-11-16T17:40:10.990 回答