同时重新加载行和整个表时崩溃

时间:2011-08-24 15:00:53

标签: iphone objective-c cocoa-touch uitableview crash

我在这里有一个很好的错误,特别是在慢速设备中。 我有一个类似于App Store应用程序中的UITableView jusk,底部有一个Load More按钮。 按下它时,我从服务器加载新信息,设置数组,然后重新加载表视图。因为信息也是表格行中显示的每个对象的图像的URL,所以当我们得到它时,我们开始下载图像。加载图像后,我重新加载对象的行。

[self.searchResultsTableView reloadRowsAtIndexPaths: [NSArray arrayWithObject: path] withRowAnimation: UITableViewRowAnimationNone];

当因为图像被下载而正在重新加载行时出现问题,并且整个表正在这样做,因为用户按下了加载更多按钮并获得了更多信息。然后我收到了这个错误:

Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (140) must be equal to the number of rows contained in that section before the update (125), plus or minus the number of rows inserted or deleted from that section (1 inserted, 1 deleted).

这是完全明白的,在新图像行更新时,表格被放大了。 我的问题是:如何锁定它,以便在重新加载整个表之前不重新加载该行?它会很像table.isReloading。我尝试使用布尔锁,并在主线程中执行这两个操作,但它不起作用... 非常感谢。

1 个答案:

答案 0 :(得分:0)

嗯,这篇文章中的一些研究为这一切提供了更多的启示。

  

reloadRowsAtIndexPaths:withRowAnimation:如果要提醒用户单元格的值正在发生变化,请调用此方法。但是,如果通知用户并不重要 - 也就是说,您只想更改单元格显示的值 - 您可以获取特定行的单元格并设置其新值。

这就是我所做的,我得到了单元格并为图像设置了新值,而不是重新加载整个图像。我想它也更有效率:

AHMyTableViewCell *cell = (AHMyTableViewCell *) [self.myTableView cellForRowAtIndexPath:path];

                if ((cell != nil) && ([cell  isKindOfClass:[AHMyTableViewCell class]]))
                    cell.myImageView.image = image;

现在不会崩溃。