UICollectionView:如何在加载视图之前和之后处理更新?

时间:2014-02-15 10:58:45

标签: ios cocoa-touch ios7 uicollectionview

我在通过KVO接收这些更新时遇到更新集合视图的问题。

e.g。删除我执行以下操作:

dispatch_async(dispatch_get_main_queue(), ^{
    NSUInteger index = [self.albumObjects indexOfObject:oldObject];
    NSIndexPath* indexPath = [NSIndexPath indexPathForItem:index inSection:0];
    [self.dataSource removeObjectAtIndex:index];
    [self.collectionView deleteItemsAtIndexPaths:@[indexPath]];
}

上面给出了错误:

attempt to delete item 0 from section 0 which only contains 0 items before the update

好的...所以我们之后从数据源中删除然后返回以下错误:

dispatch_async(dispatch_get_main_queue(), ^{
    NSUInteger index = [self.albumObjects indexOfObject:oldObject];
    NSIndexPath* indexPath = [NSIndexPath indexPathForItem:index inSection:0];
    [self.collectionView deleteItemsAtIndexPaths:@[indexPath]];
    [self.dataSource removeObjectAtIndex:index];
}

但是我现在得到以下错误:

Invalid update: invalid number of items in section 0.  The number of items contained in an existing section after the update (1) must be equal to the number of items contained in that section before the update (1), 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).

所以看来我不能赢?我在这做错了什么?

1 个答案:

答案 0 :(得分:0)

似乎dispatch_async()导致异常:当您修改数据源(将更新程序块添加到主队列的末尾)时,当您尝试更新collectionView时,该项已被删除。

您使用什么数据源?是手动管理吗?或者viewController正在观察数据源?