在iOS 10中引入prefetchDataSources
的目的是什么?
我刚刚在XCode 8 GM Seed中运行了一个项目并开始出错:
MessagesExtension[17902:1238603] *** Assertion failure in -[UICollectionView _createPreparedSupplementaryViewForElementOfKind:atIndexPath:withLayoutAttributes:applyAttributes:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UICollectionView.m:2161
答案 0 :(得分:22)
UICollectionView今年获得了一个新属性 prefetchDataSource。就像现有的委托和dataSource一样 属性,我们可以简单地将它设置为实现new的一些对象 UICollectionViewDataSourcePrefetching协议。
此协议在iOS 10中是全新的,需要我们只实现一项新功能:
public func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath])
调用此函数时,我们可以检查indexPaths数组 我们已经过去了解哪些细胞即将出现"因此 我们应该开始为哪些单元格加载数据。
详细了解与示例参考链接 UICollectionViewDataSourcePrefetching
答案 1 :(得分:4)
从xcode 8更新到8.1后,我遇到了同样的问题。 我可以解决它从main.storyboard中删除(Outlets reference)。
这是我在故事板中的每个CollectionView。还要保留我的ViewController:
Class(YourViewControllerName):( YourViewControllerType),UICollectionViewDataSource,UICollectionViewDelegate {
}
然后我可以构建并运行我的应用程序
但是,如果你需要使用(UICollectionViewDataSourcePrefetching),我建议你删除当前的UICollectionView,稍后再创建一个新的UICollectioView。就像你可以在更新xcode或swift之后使用UICollectionViewDataSourcePrefetching
答案 2 :(得分:1)
在ViewController中实现协议" UICollectionViewDataSourcePrefetching"
类ViewController:UIViewController,UICollectionViewDataSourcePrefetching {
将以下代理设置为storyboard中的集合视图(请参阅附图) 或以编程方式
在 ViewController viewDidLoad 方法
collectionView.delegate = self
collectionView.dataSource = self
collectionView.prefetchDataSource = self
请参阅此示例 - https://github.com/Be-With-Viresh/CollectionViewWithPrefetch
答案 3 :(得分:0)
添加协议" UICollectionViewDataSourcePrefetching" 然后使用以下功能。
collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath])
collectionView(_ collectionView: UICollectionView, cancelPrefetchingForItemsAt indexPaths: [IndexPath])
有关详细信息,请参阅链接:https://adoptioncurve.net/archives/2016/06/collection-view-updates-in-ios10/