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 只是一个数据存储对象,我已经在初始化方法中添加了五个 BNRItem 对象。然后将它们的字符串描述打印到 UI。我的困惑特别是关于这里的这条线:

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

我理解这一行的方式是 objectAtIndex: 只是检索 BNRItemStore 中的项目并将它们分配给变量。我的问题是:

objectAtIndex: 如何使用参数 [indexPath row] 将所有五个对象返回给变量 *p?我的印象是 indexPath 对象包含一个部分和一行。所以 row 属性只会返回一个单行索引。在这里,看起来数组正在循环,它的 5 个内容返回到变量,然后打印到 UI。或者这不是发生了什么?row 属性实际上在这里做什么?

4

1 回答 1

1

你的理解是正确的。NSIndexPath 封装了一个部分和一行。我认为您的困惑是,BNRItem *p它没有指向所有 5 个项目(它一次只指向一个)......相反,该方法tableView:cellForRowAtIndexPath:是为表视图中显示的每一行调用的。

还有另一种方法,tableView:numberOfRowsInSection:称为。我假设此方法返回数字 5,因此tableView:cellForRowAtIndexPath:被调用 5 次......每次 indexPath 将有不同的行,因此打印不同的对象。

于 2012-10-24T05:33:14.230 回答