• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - UICollectionView 刷新数据

[复制链接]
菜鸟教程小白 发表于 2022-12-12 21:44:17 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用一个显示对象数组的 CollectionView。 单击按钮时,我用一组新数据填充此数组。 我想用这些数据刷新 CollectionView。 是否有任何声明来更新它而不是比较每个项目并有选择地删除和添加? reloadData 通常会出现以下错误。

CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION

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

提前致谢



Best Answer-推荐答案


尝试- (void)performBatchUpdatesvoid (^)(void))更新完成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: 作为合适。

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

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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap