在主线程中,iOS代码在commitAnimations上崩溃

时间:2012-06-07 04:59:32

标签: ios crash commitanimations

我正在为滚动视图内容设置动画,以便下拉刷新。

NSLog(@" in main thread? %d", [NSThread isMainThread]); // prints 1
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:.3];
[scrollView setContentInset:UIEdgeInsetsMake(0.0f, 0.0f, scrollView.contentInset.bottom, 0.0f)];
// Crash here
[UIView commitAnimations];

我在提交动画时遇到了崩溃,它使主线程崩溃了。如果我删除这段代码,我的应用程序永远不会崩溃。如果它几乎缩小到这个代码块,那么在这一点上可能导致崩溃的原因是什么?

1 个答案:

答案 0 :(得分:1)

由于动画是滚动而且cellForRowAtIndexPath引用了Core Data fetch请求的结果,因此动画崩溃了应用程序,因为我在重新加载表视图数据之前意外地做了它。发生这种情况是因为表视图中的数据不再可用,因此动画滚动到不再存在的行。

获得的经验 - 如果您正在使用scrollview动画和Core Data,请注意何时选择重新加载表视图数据。不执行提取,然后滚动,然后重新加载表视图数据。执行提取,然后重新加载表视图数据,然后滚动。

如果发生了崩溃错误消息,那将是非常明显的。