Core Data是很好的东西,开发人员不用关心数据存储细节和SQL语句即可进行数据持久化,但Core Data使用不合理的话也将给自己产生不少坑,本人自认也是Core Data小白一枚,只是想给大家分享一个个人结合NSFetchedResultsController作为UICollectionView数据源开发过程碰到的问题。
场景如下:
1 | //懒加载 NSFetchedResultsController getter |
以上是未优化前的代码,时常在进行Items
1 | - (void)controller:(NSFetchedResultsController *)controller |
进行增删改后出现App崩溃,原因如下:
1 | NSInternalInconsistencyException |
原因显而易见,正如描述的那样,在cell 的增删时没有对- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
的数量进行更新,导致cell的数量与数据源的数量不一致而程序崩溃。
在网上找了很久都没找着解决办法,后来上GitHub找了个NSFetchedResultsController 与 UICollectionView搭配使用的范例(在这表示感谢作者分享),仔细看了一下作者的使用方式,发现更为规范整洁,于是对自己现有的代码进行优化,bug就解决了。