2016-03-29 43 views
0

Bir activityCell oluşturmaya çalışıyorum, bu nedenle kullanıcı bu düğüme ulaştığında bir etkinlik göstergesine sahip bir hücre gösterecektir. Bu iyi çalışıyor, ancak moreDataAvailablefalse ise bu hücreyi kaldırmanız gerekir. Ancak hatayı takip etmeye devam ediyorum?Daha fazla aktivite hücresi CollectionViewCell

'NSInternalInconsistencyException', reason: 'attempt to delete item 0 from section 1 which only contains 0 items before the update'

numberOfItemsInSection

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
{ 

    if section == 0 { 
     return organizationArray.count 
    } else { 
     if self.moreDataAvailable == true { 
      return 1 
     } else { 
      return 0 
     } 
    } 

} 

gizle Koleksiyon Hücre

func hideCollectionViewFooter() { 



    self.collectionView!.deleteItemsAtIndexPaths([NSIndexPath(forRow: 0, inSection: 1)]) 
} 

numberOfSectionsInCollectionView

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 

    return 2 
} 

cellForItemAtIndexPath

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 


    if indexPath.section == 0 { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("OrganizationCell", forIndexPath: indexPath) as! OrganizationCollectionViewCell 


     cell.customerLabel?.text = organizationArray[indexPath.item].name.uppercaseString 

     cache.fetch(key: organizationArray[indexPath.item].coverPhoto).onSuccess { data in 
      cell.customerImageView?.image = UIImage(data: data) 
     } 
     return cell 
    } else { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("ActivityCell", forIndexPath: indexPath) as UICollectionViewCell 
     return cell 

    } 


} 

fazla yükle veri varsa alt

override func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) { 

     if !loadingData && indexPath.item == organizationArray.count - 1 && self.moreDataAvailable { 

      self.loadingData = true 

      proposeAccess(false, success: { 
       self.loadingData = false 
      }) 

     } 
} 

Güncelleme Örgütü ulaşmak ve kontrol ederken Daha

func updateOrganizations(refresh: Bool) { 
    let realm = try! Realm() 


    GetOrganization.request(String(self.lastLoadedPage), limit: String(limit), location: self.lastLocation!, radius: String(100), refresh: refresh, 
    success: { numberOfResults in 


     //Sort by distance 


     self.organizationArray = GetOrganization.sortOrganizationsByDistanceFromLocation(realm.objects(Organization), location: self.lastLocation!) 

     self.lastLoadedPage = self.lastLoadedPage + 1 

     if numberOfResults < self.limit { 
      //Hide FooterView 
      self.moreDataAvailable = false 
      self.hideCollectionViewFooter() 

     } 


    }, error: { 
     self.organizationArray = GetOrganization.sortOrganizationsByDistanceFromLocation(realm.objects(Organization), location: self.lastLocation!) 

     print("error") 
    }) 


} 
+0

Bölüm sayınız nerede tanımlandı? ActivityCell'i bölüm 0'da son bir öğe olarak değil, yeni bir bölümde yeni bir öğe olarak eklemediğinizi düşünüyor. – dirkgroten

+0

Eklemeyi unuttum, bunu ekledim ve gizleme hücresi metodunu –

cevap

0

Bu hata, geçerli tablo görünümünde bulunmayan hücreyi silmeye çalıştığınız anlamına gelir. Muhtemelen moreDataAvailable güncelleme talebinde bulunmadan önce zaten yanlıştı.

Etkinlik göstergesini görüntülemek için tablo altbilgi görünümünü kullanmanızı öneririm. Ayrıca, veri yüklendikten sonra bir dizi yüklü öğe görüntüleyebilirsiniz.

+0

Kodumda neyin yanlış gittiğini göremiyorum: "updateOrganizations", viewDidLoad içinde çağrıldı ve "reloadData", "organizationArray" içinde didSet içinde. Bir tableViewFooter'ı koleksiyon görünümünde nasıl kullanabilirim? –

+0

@PeterPik özür dileriz, koleksiyon görünümü olduğunu fark etmedi. Örneğin. 'CollectionView'ın: viewForSupplementaryElementOfKind: atIndexPath:'. UpdateOrganizations'ı çağırmadan önce 'moreDataAvailable = true' ayarladınız mı? –

+0

Evet, true olarak ayarlandı –

İlgili konular