CollectionView.ReloadItemsForIndexPaths 迅速崩溃

Posted

技术标签:

【中文标题】CollectionView.ReloadItemsForIndexPaths 迅速崩溃【英文标题】:CollectionView.ReloadItemsForIndexPaths crash swift 【发布时间】:2015-10-19 09:25:54 【问题描述】:

这是崩溃的代码

 for var i=0;i<Data.NearByList.count;i++ 

            if let collectionView = collview 
                collectionView.reloadItemsAtIndexPaths([NSIndexPath(forItem: i, inSection: 0)])
            

        

我想重新加载 viewdidApear 中的 collectionView 数据,因为某些图像显示不正确 但总是得到这个错误

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSStackBlock__ _setNeedsFocusItemOverlayUpdate]: unrecognized selector sent to instance 0x45426c' *** First throw call stack: (0x2799386b 0x39092dff 0x27999035 0x27996c8f 0x278c62b8 0x2c2387d3 0x2c238379 0x2bb09dc3 0x2c241e7b 0x2bc82b45 0x2c2435fd 0x2bab3abd 0x2c242e25 0x2c2413fd 0x2bc7ea1d 0x1efe9c 0x2029e4 0x28694b8b 0x27947ffd 0x27947a0b 0x279477e1 0x2799bac3 0x278a904b 0x28692317 0x28696e4b 0x1fe0ec 0x117a6c 0xfe684 0x117bfc 0x27218a25 0x28750a05 0x286b24af 0x286a48bf 0x28752cc5 0x14bbdab 0x14c0829 0x27956595 0x27954a8f 0x278a71e9 0x278a6fdd 0x30b4baf9 0x2bb0c18d 0x1f51a8 0x397bd873) libc++abi.dylib: terminating with uncaught exception of type NSException

有人能找到解决办法吗

【问题讨论】:

为什么不直接调用 collectionView.reloadData() 呢?为什么需要这个迭代? 它正在重新加载一些单元格,一些图像仍然显示不正确 我认为您的数据源没有刷新。您应该注意这一点,而不是破解 collectionView, 我想在单元格中添加圆形图像,但其中一些看起来像“钻石” 我的数据源中有所有图像,其中大部分看起来像圆形 【参考方案1】:

你没有直接发送这个选择器给实例,但是collectionview发送它是因为它想要更新单元格。

首先,确保 indexPath 存在,并且由于您正在重新加载大量单元格,您可以创建一个包含 indexPaths 的数组,然后一次重新加载,您还可以将 reload-call 包装到 performBatchUpdates 调用中,就像这样。

var indexPathsToReload = [NSIndexPath]()
for var i in 0..<Data.NearByList.count 
    indexPathsToReload.append(NSIndexPath(forItem: i, inSection: 0))

然后你可以简单地一次重新加载

collectionView.reloadItemsAtIndexPaths(indexPathsToReload)

或批量更新(您也可以包含其他更新)

collectionView.performBatchUpdates( () -> Void in
    collectionView.reloadItemsAtIndexPaths(indexPathsToReload)
    // Any additional change
    )  (_) -> Void in
        print("Finished")

【讨论】:

嘿,它在设备上不起作用,我不明白为什么。仍然给我这个错误 请确保您立即重新加载它并且您是从主线程执行此操作,另外,请确保正确设置单元格 我在主线程中重新加载了一次 var indexPathsToReload = [NSIndexPath]() for var i in 0..

以上是关于CollectionView.ReloadItemsForIndexPaths 迅速崩溃的主要内容,如果未能解决你的问题,请参考以下文章