2016-09-10 15 views
8

iOS 10'da tanıtılan prefetchDataSources'un amacı nedir?UICollectionView iOS 10'da Veri Kaynağı Önceden Alma?

Sadece XCode 8 GM Seed bir proje koştu ve başladık alma hataları:

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 

enter image description here

cevap

19

UICollectionView bu yıl prefetchDataSource adlı yeni bir özellik kazanır. Sadece varolan delege ve dataSource özellikleri gibi, yeni UICollectionViewDataSourcePrefetching protokolünü uygulayan bazı nesnelere ayarlayabilirsiniz.

Bu protokol

iOS 10'da yepyeni ve biz sadece bir yeni işlevi uygulamak gerekir: Bu fonksiyon çağrıldığında

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

, biz indexPaths dizisi biz' inceleyebilirsiniz hangi hücrelerin "yakında" geldiğini ve bu nedenle de muhtemelen veriyi yüklemeye başlamamız gereken hücrelerini bilmek üzere geçti.

detay anlamak için örnekle fonksiyonları aşağıda kullanmak ardından protokol "UICollectionViewDataSourcePrefetching" ekle Ve bağlantı UICollectionViewDataSourcePrefetching

1

uygulamak protokol "UICollectionViewDataSourcePrefetching" viewController size de

olarak

sınıf ViewController: UIViewController, UICollectionViewDataSourcePrefetching {

Set Film şeridinde koleksiyonunuzu görünümüne delege aşağıdaki veya programlı

yılında viewController enviewDidLoad yöntem

CollectionView'ın (ekli resme bakın) .delegate = kendi

collectionView.dataSource = kendiliğinden

collectionView.prefetchDataSource =

Bu örnek bakınız kendini - ı xcode 8'den 8.1 güncelleme sonra aynı problem vardı https://github.com/Be-With-Viresh/CollectionViewWithPrefetch

enter image description here

2

. Ana.storyboard'dan (Çıkışlar referansı) silinmesini çözebilirim. Ben film şeridindeki vardı her CollectionView için

Outtles references

Bu. Ayrıca öylece benim ViewController bırakın:

Class UIviewcontroller

Class (YourViewControllerName): (YourViewControllerType), UICollectionViewDataSource, UICollectionViewDelegate {

}

Sonra ben oluşturmak ve

benim App çalıştırabilirsiniz

Bununla birlikte, eğer (UICollectionViewDataSourcePrefetching) kullanımına ihtiyacınız varsa, mevcut UICollectionView öğesini silerseniz, daha sonra yeni bir UICollectioView oluşturun. xcode veya swift

güncelledikten sonra UICollectionViewDataSourcePrefetching kullanabilirsiniz