iOS 10 中的 UICollectionView 预取数据源?

UICollectionView Prefetch Data Source in iOS 10?

在 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

UICollectionView gains a new property this year called prefetchDataSource. Just like the existing delegate and dataSource properties, we can simply set it to some object that implements the new UICollectionViewDataSourcePrefetching protocol.

此协议是 iOS10 中的全新协议,只需要我们实现一个新功能:

public func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath])

When this function is called, we can examine the indexPaths array we're passed in to know which cells are "coming up soon" and thus which cells we should probably begin loading the data for.

有关示例的详细理解,请参阅 link UICollectionViewDataSourcePrefetching

添加协议"UICollectionViewDataSourcePrefetching" 然后使用下面的函数。

  1. collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath])

  2. collectionView(_ collectionView: UICollectionView, cancelPrefetchingForItemsAt indexPaths: [IndexPath])

详情参考Link:https://adoptioncurve.net/archives/2016/06/collection-view-updates-in-ios10/

在你ViewController中实施协议"UICollectionViewDataSourcePrefetching"作为

class ViewController: UIViewController, UICollectionViewDataSourcePrefetching {

在情节提要中将以下委托设置为您的集合视图(见附图) 或以编程方式

ViewController的viewDidLoad方法

collectionView.delegate = 自己

collectionView.dataSource = 自己

collectionView.prefetchDataSource = 自己

参考这个例子 - https://github.com/Be-With-Viresh/CollectionViewWithPrefetch

我从 xcode 8 更新到 8.1 后遇到了同样的问题。 我可以解决这个问题,从 main.storyboard 中删除(Outlets 参考)。

这是我在情节提要中的每个 CollectionView。也留下我的 ViewController 就这样:

Class(您的ViewController姓名):(您的ViewController类型)、UICollectionViewDataSource、UICollectionViewDelegate{

}

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

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

后使用 UICollectionViewDataSourcePrefetching