防止UICollectionView中崩溃

鲍里斯(Boris Y.)

我们的应用程序具有UICollectionViewdataSource字典定期更新。我们永远不知道下一次更新何时发生。用户单击按钮后可以调用Collection View重新加载方法,也可以在网络请求成功后异步发生。鉴于以上信息,在重新加载集合视图并同时更新其数据源时,我们可能会出现竞争状况。我们甚至记录了以下崩溃,并且我们相信由于上述比赛情况,它发生了。崩溃消息:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

导致崩溃的方法:collectionViewLayout sizeForItemAtIndexPath:

此方法根据中的项目计数计算集合视图部分的高度sectionWithProducts由于dataSourcecount小于,因此崩溃indexPath.row和导致崩溃的行:

NSArray *sectionWithProducts = self.dataSource[indexPath.row];

在崩溃发生之前调用了以下行:

[self.collectionView setCollectionViewLayout:[self flowLayout] animated:NO];
[self.collectionView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
[self.collectionView reloadData];

为了避免这种情况,我们决定只将更新数据源的代码放入主线程中。

// Always run on main thread in hope to prevent NSRangeException. 
// Reloading data should happen only sequential.
dispatch_async(dispatch_get_main_queue(), ^(void) {
    self.dataSource = newValue;
});

我们[self.collectionView reloadData]的代码中有很多在主线程上运行它们是否值得?它发生得很快,因此不应长时间阻塞UI。

是否总是在后台队列上调用UICollectionViewDelegateFlowLayout具有indexPath属性的委托方法

Jarora

首先,应在主线程上调用所有UIKIT方法,包括reloadData。这虽然不能解决您的崩溃问题。其次,在代码中的某个地方存在竞争状况,在此情况下,您正在调用reloadData并同时更改数据源,并且需要弄清楚它的发生位置。这就是我看不到实际代码可以说的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

防止UICollectionView中的项目“包装”

来自分类Dev

-[UICollectionView _endItemAnimations]崩溃中的断言失败

来自分类Dev

崩溃的UICollectionView

来自分类Dev

防止MEX文件在MATLAB中崩溃

来自分类Dev

tvOS:如何处理TabBar和UICollectionView之间的焦点更改并防止崩溃

来自分类Dev

tvOS:如何处理TabBar和UICollectionView之间的焦点更改并防止崩溃

来自分类Dev

UICollectionView在iOS 7中发生奇怪的崩溃

来自分类Dev

UICollectionView神秘崩溃

来自分类Dev

减少视频在内存中的影响以防止崩溃

来自分类Dev

防止UICollectionView重绘

来自分类Dev

如何防止UICollectionView重叠

来自分类Dev

防止UICollectionView重绘

来自分类Dev

如何防止Bootsrap崩溃?

来自分类Dev

通过编码防止崩溃

来自分类Dev

删除部分时,UICollectionView崩溃

来自分类Dev

下载图像时 UICollectionView 崩溃

来自分类Dev

添加UICollectionView后,iOS 9中的“自定义键盘”崩溃

来自分类Dev

防止Express.js崩溃

来自分类Dev

防止导航栏项目崩溃

来自分类Dev

防止Discord bot崩溃(mysql)

来自分类Dev

防止CoreData崩溃以升级用户

来自分类Dev

Bootstrap手风琴可防止asp.net中的回发崩溃

来自分类Dev

如何防止JavaScript中的循环导致浏览器或Apps崩溃?

来自分类Dev

当Apple脚本中的显示器进入休眠状态时,如何防止应用程序崩溃

来自分类Dev

当JSON中包含非法字符时,如何防止JSON分析器崩溃?

来自分类Dev

从数据库中获取空列时崩溃,如何防止?爪哇

来自分类Dev

react-navigation 防止应用程序在发布版本中崩溃

来自分类Dev

由于突出显示问题,UICollectionView随机崩溃

来自分类Dev

UICollectionView节头崩溃iOS 8

Related 相关文章

热门标签

归档