我正在阅读《大书呆子牧场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都会有不同的行,从而打印一个不同的对象。