0

Big Nerd Ranch iOS ガイドを読んでいて、このコードについて質問があります:

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];

    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
    }

    BNRItem *p = [[[BNRItemStore sharedStore] allItems] objectAtIndex:[indexPath row]];
    [[cell textLabel] setText:[p description]];
    return cell;
}

BNRItemStore は単なるデータ ストア オブジェクトであり、イニシャライザ メソッドで既に 5 つの BNRItem オブジェクトを追加しています。次に、文字列の説明が UI に出力されます。私の混乱は、特にこの行に関するものです。

BNRItem *p = [[[BNRItemStore sharedStore] allItems] objectAtIndex:[indexPath row]];

私がこの行を理解する方法は、 objectAtIndex: は BNRItemStore 内の項目を取得し、それらを変数に割り当てるだけだということです。私が持っている質問はこれです:

objectAtIndex: 5 つのオブジェクトすべてを変数 *p に引数 [indexPath 行] で返す方法は? 私は、indexPath オブジェクトが 1 つのセクションと 1 つの行を保持するという印象を受けました。したがって、row プロパティは単一の行インデックスを返すだけです。ここでは、配列がループされ、その 5 つの内容が変数に返され、UI に出力されているように見えます。それとも、それは起こっていることではありませんか?行プロパティは実際にここで何をしていますか?

4

1 に答える 1

1

あなたの理解は正しいです。NSIndexPathは、セクションと行をカプセル化します。あなたの混乱は、BNRItem *p5つのアイテムすべてを指しているのではなく(一度に1つだけを指している)tableView:cellForRowAtIndexPath:、テーブルビューに表示されている行ごとにメソッドが呼び出されることだと思います。

tableView:numberOfRowsInSection:と呼ばれる別のメソッドがあります。このメソッドは数値5を返すと想定しているため、tableView:cellForRowAtIndexPath:5回呼び出されます... indexPathが異なる行を持つたびに、異なるオブジェクトが出力されます。

于 2012-10-24T05:33:14.230 に答える