0

現在、いくつかの配列があり、それぞれに番組のタイトル、説明、期間が含まれています。私はそれらをさらに'shows'配列に入れており、この配列を使用してにデータを入力していNSTableViewます。私がやりたいのは、テーブルの最初の列の各配列からショーのタイトルを抽出し、2番目の列の説明を抽出することです。

私が現在持っているコードは、配列の配列の最初の配列を取り、列1、2番目の列の2番目の配列などにデータを入力します。テーブルを正しく入力するには、これまでのコードをどのように修正しますか?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;
}
4

1 に答える 1

0

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 (行と列の識別子に基づく) を返すこともできます。

于 2012-10-31T20:08:39.157 に答える