根据这篇文章http://aplus.rs/2014/how-to-animate-in-uicollectionview-items/我试图一次加载一个UICollectionViewCell,以便在单元格出现时为其设置动画。但是,当我调用代码循环cellCount ++时,它会产生这个错误:
由于未捕获的异常而终止应用 ' NSInternalInconsistencyException',原因:'无效更新:无效 第0节中的项目数。包含在项目中的项目数 更新后的现有部分(1)必须等于数量 更新前的该部分中包含的项目(1),加号或减号 从该部分插入或删除的项目数(插入1个, 0已删除)并加上或减去移入或移出的项目数 该部分(0移入,0移出)。'
我不能为我的生活弄明白。
这是我的代码:
-(void)addCells{
for (self.cellCount=0; self.cellCount<50; self.cellCount++) {
[self.collectionView performBatchUpdates:^{
[self.collectionView insertItemsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForItem:self.cellCount inSection:0]]];
} completion:nil];
}
}
答案 0 :(得分:3)
您可以使用计时器执行此操作,计时器的操作方法将数据源数组中的对象添加到用于填充集合视图的可变数组中。
-(void)viewDidLoad {
[super viewDidLoad];
self.mutableArray = [NSMutableArray new];
self.data = @[@"one", @"one", @"one", @"one", @"one", @"one"];
[NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(addCells:) userInfo:nil repeats:YES];
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return self.mutableArray.count;
}
-(void)addCells:(NSTimer *) timer {
static int counter = 0;
[self.mutableArray addObject:self.data[counter]];
counter ++;
[self.collectionview insertItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:self.mutableArray.count -1 inSection:0]]];
if (self.mutableArray.count == self.data.count) {
[timer invalidate];
}
}
答案 1 :(得分:1)
这种事情只有在数据源与您添加单元格所采取的操作紧密协调时才有效。
在之前调用insertItemsAtIndexPaths
,确保第0部分的数据源numberOfItemsInSection
回答您的模型计数。您的模型计数需要与cellCount
完全匹配,并且您的cellForItemAtIndexPath
需要准备好访问项0..cellCount-1
。