在我的基于文档的应用程序中没有调用NSTableViewDelegate方法。为什么?

时间:2013-09-03 01:23:25

标签: objective-c macos delegates nstableview

我正以编程方式创建NSTableView。我分配numberOfRowsInTableViewdelegate时,dataSource是唯一被调用的方法。 NSTableView仍为空白。我做错了什么?

myDocument.m中的

- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
    NSTableView *tableView = [NSTableView alloc] initWithFrame:CGRectMake(0,0,400,400)];
    // I've tried putting the delegate before the datasource. No change.
    tableView.dataSource = self;
    tableView.delegate = self;

    // I've tried adding the table before assigning the delegate/datasource. No change.
    [aController.window.contentView addSubview:tableView];
}

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{

    NSLog(@"making view for table...");

    NSBox *box = [[NSBox alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    box.borderColor = [NSColor blackColor];
    box.borderWidth = 10;
    return box;
}

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
    NSLog(@"getting data...");
    return @{ @"myKey": @"myValue" };
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
    NSLog(@"getting count...");
    return 2;
}

numberOfRowsInTableView是唯一被召唤的东西。为什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您的表视图不包含任何列,因此不会调用viewForColumn:委托方法。

使用以下内容替换windowControllerDidLoadNib中的初始化代码,并调用您的委托方法:

- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
    NSTableView *tableView = [[NSTableView alloc] initWithFrame:CGRectMake(0,0,400,400)];
    [tableView addTableColumn:[[NSTableColumn alloc] initWithIdentifier:@"MyColumn"]];
    tableView.dataSource = self;
    tableView.delegate = self;
    [aController.window.contentView addSubview:tableView];
}

您可以使用Interface Builder配置&布置你的tableview。