Асинхронная загрузка данных в UICollectoinView внутри UICollectoinviewCell

Привет, я использую UICollectionView внутри UICollectionViewCell в быстрой tvOS, чтобы он прокручивался как по горизонтали, так и по вертикали. Ниже приведен мой код просмотра Внешней коллекции.

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
    return variableCount
   }
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        // Each section contains a single `CollectionViewContainerCell`.
        return 1
    }
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        // Dequeue a cell from the collection view.            
        if let cell = collectionView.dequeueReusableCellWithReuseIdentifier(CollectionViewContainerCell.reuseIdentifier, forIndexPath: indexPath) as? CollectionViewContainerCell
        {
            cell.configureWithData("some Parameters to build inner collectionView")
                print("Returning Cell")
                        return cell
        }

        return CollectionViewContainerCell()


    }

Метод configureWithData находится в CollectionViewContainerCell, и я вызываю API асинхронно и перезагружаю представление внутренней коллекции в dispatch_async.

Прокрутка и отображение работают нормально. Проблема возникает с данными, когда я прокручиваю внешний вид коллекции (4-я ячейка, которая изначально не загружена), где я получаю те же данные в 1-й ячейке. Я вижу, что когда я говорю dequeueReusableCellWithReuseIdentifier, он повторно использует память, выделенную для ячейки, которая изначально не видна. но я настраиваю ячейку, которая здесь не отражается. Любая помощь приветствуется.


person Enmud    schedule 19.01.2016    source источник


Ответы (1)


Вы, вероятно, захотите поместить дополнительную отладочную информацию, чтобы отслеживать цикл возврата данных для удаленного API, который вы вызываете, в случае, если есть задержка во внутренних методах делегата источника данных collectionview, и вы не предоставили дополнительные вызовы очистки в Метод prepareForReuse [https://developer.apple.com/library/ios/documentation/UIKit/Reference/UICollectionReusableView_class/#//apple_ref/occ/instm/UICollectionReusableView/prepareForReuse], информация, загруженная для 1-й ячейки, останется видимой. даже если внутреннее представление коллекции было повторно использовано для 4-й ячейки, прежде чем новые данные успели заполниться с помощью асинхронного вызова.

person J.GUI    schedule 19.01.2016