collectionView.reloadData无法正常运行

时间:2016-09-12 11:54:52

标签: swift uicollectionview

我发现我的followCollectionView没有在我的代码中的这个特定位置重新加载。

func unFollowBtnPressed() {

    if let itemPaths = followCollectionView.indexPathsForSelectedItems() {
        unFollowPosts(itemPaths)
    } else {
        // No item to unfollow
    }

    self.followCollectionView.reloadData() 
}

func unFollowPosts(itemPaths: [NSIndexPath]) {

    followCollectionView.performBatchUpdates({

        let sortedIndexPathArray = itemPaths.sort{$1.row < $0.row}

        for indexP in sortedIndexPathArray {
            DataService.ds.removeFollow(PostService.ps.followingPosts[indexP.row])
            PostService.ps.followingPosts.removeAtIndex(indexP.row)
        }
        self.followCollectionView.deleteItemsAtIndexPaths(sortedIndexPathArray)

    }) { (success: Bool) in
    }
}

程序执行reloadData()但是从未调用过cellForItemAtIndexPath(Everything被连接正确,因为调用reloadData的其他地方工作正常)。我认为这是一个计时问题,因为如果我重新安排我重新加载数据的地方,集合视图就可以重新加载了。以下是工作代码。我不确定为什么上述方法有效,而且下面的方法没有。我试图在dispatch_async(dispatch_get_main_queue())中包装reloadData()代码,但它仍然没有用?

func unFollowBtnPressed() {

    if let itemPaths = followCollectionView.indexPathsForSelectedItems() {
        unFollowPosts(itemPaths)
    } else {
        // No item to unfollow
        self.followCollectionView.reloadData()
    }

}

func unFollowPosts(itemPaths: [NSIndexPath]) {

    followCollectionView.performBatchUpdates({

        let sortedIndexPathArray = itemPaths.sort{$1.row < $0.row}

        for indexP in sortedIndexPathArray {
            DataService.ds.removeFollow(PostService.ps.followingPosts[indexP.row])
            PostService.ps.followingPosts.removeAtIndex(indexP.row)
        }
        self.followCollectionView.deleteItemsAtIndexPaths(sortedIndexPathArray)

    }) { (success: Bool) in
        self.followCollectionView.reloadData()
    }
}

1 个答案:

答案 0 :(得分:0)

你尝试过这些:

DispatchQueue.main.async(execute: {
    //reload
})

OperationQueue.main.addOperation({
    //reload
})