简体   繁体   中英

reloadData() doesn't work with refreshControl

I have UICollectionView that manages a lot of cells. When I delete a cell, I would like the cell disappears with a refreshControl. But I don't understand why the reloadData does not act. If anyone can help me thank you in advance.

In my view didLoad :

self.collectionView!.alwaysBounceVertical = true
let refresher = UIRefreshControl()
refresher.tintColor = MyColor.Color
refresher.addTarget(self, action: #selector(PublicListController.refreshStream), forControlEvents: .ValueChanged)
refreshControl = refresher
collectionView!.addSubview(refreshControl!)

collectionView.dataSource = self
self.populateDataBest()

My simply function :

func refreshStream() {
    collectionView?.reloadData()
    refreshControl?.endRefreshing()
}

I complete my CollectionView with the method populateDataBest :

 func populateDataBest() {
    self.videosService.get(true, completionHandler: {
        videosBest, error in
        dispatch_async(dispatch_get_main_queue(), {
            if error != nil {
                if error!.code == -999 {
                    return
                }
                self.displayError(informations.LocalizedConnectionError)
                return
            }
                self.bestClip = videosBest
                for (indexBest, _) in (self.bestClip?.enumerate())! {
                    let videoBest:Clip = self.bestClip![indexBest]
                    self.pictureArrayVideo.addObject(["clip": videoBest, "group": "BEST"])
                }
                 self.dataSource.updateData(self.pictureArrayVideo)
                 self.collectionView.reloadData()
        })
    })
}

And the first reload work at the end of my method populateDataBest..

EDIT :

I try to implement function who remove my element (I put 0 in parameters on remove method just for my test for the moment)

func refreshStream() {
      dispatch_async(dispatch_get_main_queue(), {
        self.remove(0)
        self.collectionView.reloadData()
    })
     self.refreshControl.endRefreshing()
}

func remove(i: Int) {
    self.listForPager.removeAtIndex(i)
    let indexPath: NSIndexPath = NSIndexPath(forRow: i, inSection: 0)
    self.collectionView.performBatchUpdates({
        self.collectionView.deleteItemsAtIndexPaths(NSArray(object: indexPath) as! [NSIndexPath])
        }, completion: {
            (finished: Bool) in
            self.collectionView.reloadItemsAtIndexPaths(self.collectionView.indexPathsForVisibleItems())
    })
}

And I have this error after

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of items in section 0.  The number of items contained in an existing section after the update (8) must be equal to the number of items contained in that section before the update (8), plus or minus the number of items inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of items moved into or out of that section (0 moved in, 0 moved out).'

Someone know why and can help me plz ?

Thx in advance.

如果您要从数组中骑行集合,则还应删除该项目,因为该行将消失并最终重新加载。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM