ios - UICollectionView 刷新数据

标签 ios ipad ios7

我正在使用一个显示对象数组的 CollectionView。 单击一个按钮,我用一组新数据填充这个数组。 我想用这些数据刷新 CollectionView。 有没有什么声明可以更新这个而不是比较每个项目并有选择地删除和添加? reloadData 通常以以下错误结束。

CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION

简而言之,我正在寻找以下步骤...... 1)填充数据源数组,显示数据。 2) 用新数据填充数据源数组,刷新 CollectionView 以显示数据。

提前致谢

最佳答案

尝试 - (void)performBatchUpdates:(void (^)(void))updates completion:(void (^)(BOOL finished))completion

在你的情况下,你想要“一组全新的数据”,可以这么说,例如:

[myCV performBatchUpdates:^{
    // one of:
    // a)
    [myCV deleteSection:someIndexSetForTheEntireSection];
    [myRealDataSource empty:someIndexSetForTheEntireSection];
    //
    // OR b)
    [myCV deleteItemsAtIndexPaths:someSetOfIndexPaths];
    [myRealDataSource removeIndexPaths:someSetOfIndexPaths];

    // Either case:
    NSArray *indexPaths = [myRealDataSource getNewDataAndReturnIndexPaths];

    // if a)
    [myCV insertSections:newIndexSetForNewSection];

    // Either case:
    [myCV insertItemsAtIndexPaths:newIndexSetForInsertions];
}
completion:^(BOOL finished) {
    NSLog(@"Done.");
    // Maybe signal something else if you want.
}];

performBatchUpdates:completion: 将期望原始数据源检查中的删除和插入进入函数,以添加到离开方法的正确数据源大小。否则它会大声提示。

如果您只有一个部分(第 0 部分),如果您总是“删除所有内容”并“插入一个完整的新集”,则可以比特定索引路径更通用。

使用 KVO 监听数据源的插入和删除的另一种选择,只需 reloadDatareloadItemsAtIndexPaths:reloadSections: 作为合适的。

我更喜欢响应式(Reactive) KVO 版本,因为我倾向于使用 Core Data 的 Collection View ,而不是伪静态或内存中的 NSArray。

为了找出 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION 问题,我会在所有异常上设置一个断点,并尝试找出真正触发问题的原因。可能您的数据源已不存在,并且当您尝试从中读取/写入时出现错误访问。

关于ios - UICollectionView 刷新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23106177/

相关文章:

UIAlertView 自定义中的 iOS 7 UIDatePicker

ios - 状态恢复时 Root View Controller 显示短暂

ios - UILabel 不会使用 AutoLayout 在 UIScrollView 内自动换行

UITableViewCell 中的 iOS 输入

javascript - 通过 js 组合 css3 转换

android - 在android中通过QR码安装应用程序

ios - 获取表格 View 中点击的单元格(附件按钮)的位置

ios - 用于在 Objective-C 中对二维数组进行排序的优于 O(n^2) 的算法

iphone - -systemFontOfSize : and -boldSystemFontOfSize:? 之间是否有中等粗细的字体

ios - 使用自定义高度在 UINavigationBar 中垂直居中元素