然而,我试图从我的collectionView中删除一个单元格。当我从数据源中删除对象并尝试批量更新时,它表示该单元格不再存在。:
'NSInternalInconsistencyException', reason: 'attempt to delete item 0 from section 0 which only contains 0 items before the update'
在此代码之前,我从核心数据中删除了内容,并且行[[usermanager getSelectedUser]loadCards];
实际上通过从核心数据中获取单元格来重新加载包含单元格内容的数据源。
- (void)cardRemoved:(NSNotification *)note {
NSDictionary *args = [note userInfo];
Card *card = [args objectForKey:@"card"];
[[usermanager getSelectedUser]loadCards];
[self.collectionView performBatchUpdates:^{
NSIndexPath *indexPath =[NSIndexPath indexPathForRow:card.position.intValue inSection:0];
[self.collectionView deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
} completion:^(BOOL finished){
[self.collectionView setDelegate:self];
[self.collectionView setDataSource:self];
[self.collectionView reloadData];
}];
}
如果在调用loadCards
行之前打印出单元格数量,我会得到正确的行数(正如预期的那样)。
修改 这就是loadCards所说的:
-(NSMutableArray *)getCards{
UserModel *selectedUser = [self getSelectedUserFromDB];
NSMutableArray *cards = [[NSMutableArray alloc] init];
for(CardModel *cardModel in selectedUser.cards){
[cards addObject:[self modelToCard:cardModel]];
}
return cards;
}
我注意到,即使我没有调用loadCards
方法,它也说视图中没有项目。
任何人都可以帮助我吗?谢谢
答案 0 :(得分:1)
从UICollectionView
移除单元格,然后从模型中删除它们。同样的事情也适用于UITableView
。删除项目后,您也无需重新加载集合视图。
如果您愿意,只需从模型中删除项目,然后重新加载集合视图,模型中不存在的项目将从集合视图中消失,但没有从集合中删除项目所带来的相同动画图。