【问题标题】:UICollectionView: How to handle updates both before and after view is loaded?UICollectionView:如何在加载视图之前和之后处理更新?
【发布时间】:2014-02-15 10:58:45
【问题描述】:

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

例如对于删除,我执行以下操作:

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

看来我赢不了?我在这里做错了什么?

【问题讨论】:

    标签: ios cocoa-touch ios7 uicollectionview


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2019-09-10
      • 2012-05-29
      • 1970-01-01
      • 2017-05-19
      • 2020-03-06
      • 1970-01-01
      相关资源
      最近更新 更多