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は、今年prefetchDataSourceと呼ばれる新しいプロパティを取得します。既存のデリゲートとdataSourceプロパティのように、新しいUICollectionViewDataSourcePrefetchingプロトコルを実装するオブジェクトに設定するだけです。
このプロトコルはiOS 10で新しく追加されたもので、新しい機能を1つだけ実装する必要があります:
public func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath])
この関数が呼び出されると、渡されたindexPaths配列を調べて、「間もなく登場する」セルと、データの読み込みを開始するセルを知ることができます。
例で詳細を理解するには、リンクを参照してください ICollectionViewDataSourcePrefetching
xcode 8から8.1に更新した後、同じ問題が発生しました。 (アウトレット参照)をmain.storyboardから削除することで解決できます。
これは、ストーリーボードにあるすべてのCollectionViewに当てはまります。また、ViewControllerはそのままにしておきます。
クラス(YourViewControllerName):(YourViewControllerType)、UICollectionViewDataSource、UICollectionViewDelegate {
}
次に、アプリをビルドして実行できます
ただし、(UICollectionViewDataSourcePrefetching)を使用する必要がある場合は、現在のUICollectionViewを削除し、後で新しいUICollectioViewを作成することをお勧めします。同様に、xcodeまたはSwiftを更新した後にUICollectionViewDataSourcePrefetchingを使用できます
ViewControllerにプロトコル "UICollectionViewDataSourcePrefetching"を実装します。
クラスViewController:UIViewController、UICollectionViewDataSourcePrefetching {
以下のデリゲートをストーリーボードのコレクションビューに設定する(添付の画像を参照)またはプログラムで設定する
ViewController'sviewDidLoadメソッド内
collectionView.delegate = self
collectionView.dataSource = self
collectionView.prefetchDataSource = self
この例を参照してください- https://github.com/Be-With-Viresh/CollectionViewWithPrefetch
プロトコル「UICollectionViewDataSourcePrefetching」を追加し、以下の関数を使用します。
collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath])
collectionView(_ collectionView: UICollectionView, cancelPrefetchingForItemsAt indexPaths: [IndexPath])
詳細については、リンクを参照してください: https://adoptioncurve.net/archives/2016/06/collection-view-updates-in-ios10/