加载更多活动单元格CollectionViewCell

时间:2016-03-29 10:44:40

标签: ios swift uicollectionview

我正在尝试创建一个activityCell,因此当用户到达该按钮时,它将显示一个带有活动指示符的单元格。这似乎工作正常,但如果moreDataAvailablefalse,则应移除此单元格。但是我一直收到以下错误?

'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
        }
    }

}

隐藏收集单元

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

    }


}

到达底部时加载更多

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
            })

        }
}

更新组织并检查是否有更多数据

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")
    })


}

1 个答案:

答案 0 :(得分:0)

此错误表示您正在尝试删除当前表视图状态中不存在的单元格。在updateOrganizations中的请求完成之前,可能moreDataAvailable已经为false。

我建议您使用表格页脚视图来显示活动指示符。此外,加载数据后,您可以显示多个已加载的项目。