在UICollectionView,我试图用performBatchUpdates:completion
执行更新到我的网格视图。 我的数据源阵列是self.results
。
这里是我的代码:
dispatch_sync(dispatch_get_main_queue(), ^{
[self.collectionView performBatchUpdates:^{
int resultsSize = [self.results count];
[self.results addObjectsFromArray:newData];
NSMutableArray *arrayWithIndexPaths = [NSMutableArray array];
if (resultsSize == 0) {
[arrayWithIndexPaths addObject:[NSIndexPath indexPathForRow:0 inSection:0]];
}
else {
for (int i = 0; i < resultsSize; i++) {
[arrayWithIndexPaths addObject:[NSIndexPath indexPathForRow:resultsSize + i inSection:0]];
}
}
for (id obj in self.results)
[self.collectionView insertItemsAtIndexPaths:arrayWithIndexPaths];
} completion:nil];
的我有什么/我在做什么说明:
此代码当初始插入集合视图完成运行正常。 然而,当我添加/插入更多的数据到我的收藏视图(通过更新self.results
和调用此),这提供了以下错误:
*终止应用程序由于未捕获的异常“NSInternalInconsistencyException”,原因:“无效更新:在部分0项更新后包含在现有部分中的项目数的无效数(8)必须等于包含在项目数更新(4)之前该节,加上或减去插入或从该段(32插入时,0删除)和加上或减去的项目数移入或移出该部分的已删除的项目的数目(0移动中,0搬出)。'
我明白这意味着数据源没有被正确更新。 然而,我查询时self.results
阵列,我看到数据的新的计数。 我这样做,使用第一线addObjectsFromArray
。 我也存储在旧的结果大小resultsSize
。 我使用该变量到新添加的索引路径添加到arrayWithIndexPaths
。
将现在,当/插入的项目,我想for循环如下:
for (id obj in self.results)
这是我现在使用的是什么。 它的工作原理最初,但进一步插入崩溃。
for (UIImage *image in newData)
的作品,以及最初但进一步插入崩溃。
从功能的名字,我相信insertItemsAtIndexPaths
将插入那些索引路径的所有项目没有环。 然而,如果没有一个循环,应用程序时,它最初试图填充数据崩溃。
我还试图从循环resultsSize + 1
,直到新的self.results
计数(其中包含新的数据),并且也崩溃在初始更新。
关于我做错了什么建议?
谢谢,