NSINDEXPATH行属性究竟如何工作



我正在阅读《大书呆子牧场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只是一个数据存储对象,我已经在Initializer方法中添加了五个BNRITEM对象。然后将其字符串描述打印到UI。我的困惑特别是在这里:

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

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

如何使用参数[IndexPath Row]将所有五个对象返回到变量 *P中?我的印象是,Indexpath对象容纳一个部分和一个行。因此,行属性只会返回一个行索引。在这里,看起来数组正在循环,其5个内容返回到了变量,然后将其打印到UI。还是那不是怎么回事?Row属性在这里实际在做什么?

您的理解是正确的。NSINDEXPATH封装了一个部分和一行。我认为您的困惑是BNRItem *p并未指向所有5个项目(仅一次指向一个项目)...相反,对于在表观视图中显示的每一行调用方法tableView:cellForRowAtIndexPath:

还有另一种称为的方法tableView:numberOfRowsInSection:。我认为此方法返回数字5,因此tableView:cellForRowAtIndexPath:称为5次...每次IndexPath都会有不同的行,从而打印一个不同的对象。

最新更新