2015-09-02 4 views
3

У меня есть изображения, размещенные в сети, которые обрабатываются в UIImageView s в моих UICollectionViewCell s. Когда я вхожу в и вне поля зрения, я часто получаю сбой и следующее сообщение об ошибке в отладчике:Ошибка утверждения в UICollectionView?

*** Assertion failure in -[UICollectionView _endItemAnimationsWithInvalidationContext:tentativelyForReordering:], /SourceCache/UIKit/UIKit-3347.44.2/UICollectionView.m:3870 
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to delete item 0 from section 0 which only contains 0 items before the update' 
*** First throw call stack: 
(0x1839702d8 0x19563c0e4 0x183970198 0x184824ed4 0x188a74348 0x100150300 0x100117c4c 0x100117d88 0x18332f010 0x1848571c4 0x1847a8604 0x1847981cc 0x184859f28 0x101410f94 0x101415c28 0x1839277f8 0x1839258a0 0x1838512d4 0x18d2a76fc 0x18844ef40 0x10011a1d4 0x195ce6a08) 

Что является причиной этой ошибки и как я должен избавиться от него?

UPDATE

Я наблюдал, что происходит сбой, когда я непосредственно перейти к collectionView, и быстро вернуться обратно, прежде чем какой-либо нагрузки клеток .. но он не должен врезаться по этой причине. Как это исправить?

вот мой cellForIndex .. Метод

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell 
     // Configure the cell 
     let book = self.books[indexPath.row] 
     let coverImage = book.coverImage 
     if coverImage == nil { 
      book.fetchCoverImage({ (image, error) -> Void in 
       collectionView.reloadItemsAtIndexPaths([indexPath]) 
      }) 
     } else { 
      let imageView = cell.imageView 
      imageView.image = book.coverImage 
     } 
     return cell 
    } 
+0

Добавить точку останова исключение и посмотреть на стек вызовов, чтобы определить, где ваша проблема - показать код – Paulw11

+0

Я попытался, но на этот раз он не потерпел крушение. и эта ошибка в моем вопросе на самом деле является NSException, которое было брошено .. это произойдет, когда я внезапно выйду из экрана просмотра коллекции до того, как загрузится. Хорошо, вот что я наблюдал @ Paulw11 –

+0

Показать еще ваш код, пожалуйста. cellAtIndex, ... – anhtu

ответ

0

Попытка сломать блок reloadItems

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell 
     // Configure the cell 
     let book = self.books[indexPath.row] 
     let coverImage = book.coverImage 
     if coverImage == nil { 
      book.fetchCoverImage({ (image, error) -> Void in 
       if collectionView != nil { // <--- something like this. I'm not sure. Just take the idea: try to check before reload. 
        collectionView.reloadItemsAtIndexPaths([indexPath]) 
       } 
      }) 
     } else { 
      let imageView = cell.imageView 
      imageView.image = book.coverImage 
     } 
     return cell 
    } 
+0

кажется, что это сработало, спасибо –

Смежные вопросы