2012-10-29 224 views
0

我目前有许多数组,每个数组都包含显示标题,描述和持续时间。我有他们进一步'显示'阵列,我用这个数组来填充我的NSTableView。我想要做的是从我的每个数组中抽取出显示标题的第一列,第二列的描述等等。使用数组数组来填充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; 
} 
+0

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

回答

0

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

还要注意,你重写的方法需要返回一个NSView(或子类)的实例(读取NSTableView.h头文件中的注释)。您可能希望使用tableView:objectValueForTableColumn:row:方法,并返回适当的NSString(基于行标识符&)。