首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >reloadData同步问题

reloadData同步问题
EN

Stack Overflow用户
提问于 2011-04-19 11:40:39
回答 1查看 1.5K关注 0票数 0

所以这是我的问题。在我的应用程序主页中,我有一个简单的UITableView,最多可以容纳3个部分,2个部分,每个部分最多包含3个条目,第三个部分最多可以容纳6个条目。

每个节都有一个与之关联的标题。

实际内容来自web,我发出请求,服务器发送数据,我用NSXMLParser解析响应,创建数组来保存每个部分(3个数组)的数据,并创建另一个数组来保持我必须显示的部分的引用。

最后,我调用myTableView reloadData刷新内容和重绘表。用户还可以自己刷新内容。为此,我使用了一种像Facebook应用程序一样的拉式刷新机制。

使用即插即用刷新的刷新内容最终也会调用myTableView reloadData。当我刷新我的内容时,这个表需要更改它的布局(例如:该表当前包含所有三个部分,在我reloadData之后它将只显示一个部分),我正在经历一次严重的崩溃。

我使用调试器来追踪问题。以下是我的发现:

  • tableView:viewForHeaderInSection:
  • tableView:cellForRowAtIndexPath:

  1. 用户将整个表拉下大约50个像素,然后释放
  2. --一个动画开始使表“向上”以容纳显示“加载”消息+表顶部动画UIActivityIndicatorView的320x50视图--
  3. Refresh被触发,我在后台任务中发出一个新的webservice请求,获取新数据,解析,更新数组,最后在主线程上执行reloadData
  4. ,同时,在刷新的同时,我注意到UITableView仍然将委托消息发送给:

我认为这是因为拉式刷新动画“移动”表并显示新的单元格/标题,从而调用上面的内容。

问题是,这会导致可怕的崩溃,因为保存节数据的数组和节数组本身似乎是并发修改的。

当发生这种情况时,委托方法可能在错误的上下文中使用更新/尚未更新的项/节数组。就是说,以前

  • numberOfSectionsInTableView:
  • tableView: numberOfRowsInSection:

有机会为更新后的数组正确地更新新结构。

我知道在没有任何代码示例的情况下说来话长,但我想,如果我已经知道了问题(至少我希望我知道),如果有人看到了我的观点,也许有人可以为我指出正确的方向来纠正这个同步问题。

感谢您的阅读!

稍后编辑

我找到了问题所在。我的拉到刷新机制使用了一个stopLoading回调,如下所示:

代码语言:javascript
复制
- (void)stopLoading 

{ isLoading = NO;

代码语言:javascript
复制
// Hide the header
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.3];
[UIView setAnimationDidStopSelector:@selector(stopLoadingComplete:finished:context:)];
self.myTableView.contentInset = UIEdgeInsetsZero;
[refreshArrow layer].transform = CATransform3DMakeRotation(M_PI * 2, 0, 0, 1);
[UIView commitAnimations];

}

在某种程度上,我为我的表重置了contentInset,将其设置为UIEdgeInsetsZero。在主线程上返回后台刷新之后,我在stopLoading之前调用了reloadData --在错误的时刻触发了错误的委托回调。

因此,在更改我的表的contentInset和reloadData之间是一个时间问题。

EN

回答 1

Stack Overflow用户

发布于 2011-04-19 11:58:37

听起来,您正在从不同的线程更新用于表视图的数据存储。这不是一个好主意--数据很容易进入不一致的状态,而且您使用的容器可能并不是线程安全的。

正确的方法是只从主线程更新此数据。另外,您可能希望查看插入行等的方法,这些方法使得完全重新加载几乎是不必要的。如果您只想因为新的数据而更新一个单元格,那么只需刷新该单元格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5715785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档