使用数组数组来填充NSTableView

时间:2012-10-29 14:33:07

标签: xcode nsmutablearray nstableview populate multiple-columns

我目前有许多数组,每个数组都包含节目标题,描述和持续时间。我将它们放在另一个“show”数组中,我使用这个数组填充我的NSTableView。我想要做的是从我的每个数组中为我的表的第一列提取节目标题,为第二列提取描述,依此类推。

我目前的代码虽然采用了我的数组数组中的第一个数组并填充了第一列,第二列的第二个数据等等。我如何修改到目前为止的内容以使表格正确填充?我尝试使用indexOfObject代替objectAtIndex,但这样做会抛出异常。这是我的(简化)代码:

AppDelegate.m

- (void)applicationDidFinishLoading:(NSNotification *)aNotification
{
    NSArray *show1 = [[NSArray alloc] initWithObjects:@"Title", @"A description", nil];
    NSArray *show2...
    NSArray *show3...
    NSArray *show4...

    self.array = [[NSMutableArray alloc] initWithObjects: show1, show2, show3, show4, nil];
    [self.tableView reloadData];
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
    return [self.array count];
}

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    NSString *identifier = [tableColumn identifier];

    if([identifier isEqualToString:@"title"]) {
        NSTableCellView *title = [tableView makeViewWithIdentifier:@"title" owner:self];
        title.textField.stringValue = [self.array objectAtIndex:0];
        return title;
    } else if {...}

    return nil;
}

1 个答案:

答案 0 :(得分:0)

Michele Percich的评论是正确答案:[self.array objectAtIndex:0]将返回第一个show数组。你想要的是“NSArray * show = [self.array objectAtIndex:row]'”以获得该节目,然后“[show objectAtIndex:0]”来获得该节目。只是一个建议,但我会使用NSDictionary的NSArray,其中键是列标识符。然后你可以使用“[self.array objectAtIndex:row] valueForKey:identifier];”

另请注意,您覆盖的方法需要返回NSView(或子类)的实例(请阅读NSTableView.h标头中的注释)。您可能希望使用tableView:objectValueForTableColumn:row:方法,而只返回相应的NSString(基于行和列标识符)。