2012-10-29 221 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(基於行標識符&)。