NSIndexPath:indexPathForRow:inSection无法正确初始化

时间:2013-11-19 21:15:42

标签: ios objective-c initialization nsindexpath

我调用了以下选择器:

- (void)loadItemView:(LoLoanedItemDoc *)itemDoc
{
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    UITableViewCell *imageViewCell = [self.tableView cellForRowAtIndexPath:indexPath];
    ((UIImageView *)[imageViewCell viewWithTag:111]).image = [self.itemDoc fullImage];
    // rest of code

最初,我注意到imageViewCell没有正确设置图像。然后我注意到imageViewCell收到了一个零值。然后我发现indexPath没有被正确初始化,那就是我现在的位置。当我在这一行设置断点时:

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

并检查该值,它显示NULL的长度为0.对于所有帐户,我正在正确初始化此值,那么我缺少什么?

2 个答案:

答案 0 :(得分:0)

第一行(NSIndexPath *indexPath = ...)不是问题。它将始终返回有效的indexPath。如果您正如您所描述的那样进行检查,则应首先“跳过”一次,然后检查indexPath的值。

如果尚未加载您的tableview,则第二行将返回nil。 (何时/何时设置数据源?)

另一件事是:您的方法目前没有使用它的参数itemDoc,而是使用类属性self.itemDoc

cellForRowAtIndexPath:(而不是viewDidLoad)中执行此操作也可能更好,因此您不必创建indexPath并检索单元格,只需检查indexPath。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Your current code

    if (indexPath.section == 0 && indexPath.row == 0) {
        ((UIImageView *)[imageViewCell viewWithTag:111]).image = [self.itemDoc fullImage];
    }

    return imageViewCell;
}

如果您愿意,可以将其放入您从tableView:cellForRowAtIndexPath:

调用的方法(就像您现在所做的那样)

答案 1 :(得分:0)

当我将项目构建为发布时,这发生在我身上。检查是否在方案中为构建配置选择了调试。