Swift3 iOS 10中的UICollectionView预取数据源?

Swift3 iOS 10中的UICollectionView预取数据源?,swift3,ios10,xcode8,Swift3,Ios10,Xcode8,iOS 10中引入的预取数据源的目的是什么 我刚刚在XCode 8 GM Seed中运行了一个项目,并开始出现错误: MessagesExtension[17902:1238603] *** Assertion failure in -[UICollectionView _createPreparedSupplementaryViewForElementOfKind:atIndexPath:withLayoutAttributes:applyAttributes:], /BuildRoot/Li

iOS 10中引入的
预取数据源的目的是什么

我刚刚在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

UICollectionView今年获得了一个名为 预取数据源。就像现有的委托和数据源一样 属性,我们可以简单地将其设置为实现新 UICollectionViewDataSourcePrefetching协议

此协议在iOS 10中是全新的,只需要实现一个新功能:

public func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath])
调用此函数时,我们可以检查indexPaths数组 我们被传进来是为了知道哪些细胞“即将出现”,因此 我们应该开始为哪些单元格加载数据

有关示例的详细理解,请参阅链接

添加协议“UICollectionViewDataSourcePrefetching” 然后使用下面的函数

  • collectionView(collectionView:UICollectionView,prefetchItemsAt IndexPath:[IndexPath])

  • collectionView(\ucollectionview:UICollectionView,cancelPrefetchingForItemsAt IndexPath:[IndexPath])


  • 有关详细信息,请参考以下链接:

    在ViewController中实现协议“UICollectionViewDataSourcePrefetching”

    类ViewController:UIViewController,UICollectionViewDataSourcePrefetching{

    在序列图像板中将以下代理设置为集合视图(请参见附图) 或以编程方式

    ViewController的viewDidLoad方法中

    collectionView.delegate=self

    collectionView.dataSource=self

    collectionView.prefetchDataSource=self

    请参阅此示例-


    从xcode 8升级到8.1后,我也遇到了同样的问题。 我可以从main.storyboard中删除(Outlets引用)来解决这个问题

    这适用于我在故事板中拥有的每个CollectionView。请将我的ViewController保留为:

    类(YourViewControllerName):(YourViewControllerType)、UICollectionViewDataSource、UICollectionViewDelegate{

    }

    然后我可以构建并运行我的应用程序

    但是,如果您需要使用(UICollectionViewDataSourcePrefetching),我建议您删除当前的UICollectionView,稍后创建一个新的UICollectionView。就像这样,您可以在更新xcode或swift后使用UICollectionViewDataSourcePrefetching