NSIndexPath行属性究竟是如何工作的

时间:2012-10-24 05:22:55

标签: nsindexpath

我正在阅读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。或者这不是正在发生的事情?行属性实际上在这里做什么?

1 个答案:

答案 0 :(得分:1)

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

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