Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 使用数组数组填充NSTableView_Xcode_Nsmutablearray_Nstableview_Populate_Multiple Columns - Fatal编程技术网

Xcode 使用数组数组填充NSTableView

Xcode 使用数组数组填充NSTableView,xcode,nsmutablearray,nstableview,populate,multiple-columns,Xcode,Nsmutablearray,Nstableview,Populate,Multiple Columns,我目前有许多数组,每个数组都包含节目标题、描述和持续时间。我将它们放在另一个“shows”数组中,并使用此数组填充我的NSTableView。我想做的是从表的第一列的每个数组中提取show title,第二列的描述,依此类推 不过,我目前拥有的代码采用数组数组中的第一个数组,并填充第一列,第二列的第二个数组,等等。我如何修改到目前为止的代码,以使表正确填充?我尝试使用indexOfObject代替objectAtIndex,但是这样做会引发异常。以下是我的(简化)代码: AppDelegate.

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

不过,我目前拥有的代码采用数组数组中的第一个数组,并填充第一列,第二列的第二个数组,等等。我如何修改到目前为止的代码,以使表正确填充?我尝试使用
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;
}

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


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

[self.array objectAtIndex:0]将返回show1,它是数组,而不是字符串。相反,我认为对于标题,您需要访问该行数组的第一个对象:[[self.array objectAtIndex:row]objectAtIndex:0]