gpt4 book ai didi

ios - 实现 UICollectionViewDataSource 协议(protocol)的最佳方式?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:28:45 25 4
gpt4 key购买 nike

我有理论问题。

目前我的应用程序使用 UICollectionView 作为显示对象列表的方式。 UIViewController,包含 UICollectionView 作为 subview ,实现 UICollectionViewDelegate 协议(protocol)并充当委托(delegate)和数据源。 Datasource使用NSFetchedResultsController提供数据;

在我看来,这不是实现数据源的最佳方式,在单独的类中实现它看起来更好。但问题在于数据源取决于 UITextField 中的搜索参数和其他一些按钮选择,因此每次当用户在搜索字段中键入文本或按下任何“排序”按钮时,我都应该更新数据源(特别是 NSFetchedResultsController 中的 fetchRequest。

那么,最后,我的问题:是否有任何实现依赖于外部参数的数据源的“最佳实践”?我应该为数据源创建单独的类,还是让它保持原样?如果将数据源实现为单独的类——我应该创建数据源委托(delegate)来在更新数据源时在委托(delegate)上调用自制的委托(delegate)方法,还是有一些其他的解决方法来解决这个问题(我不考虑在数据源更新上使用通知,因为对我来说通知机制比我在这里需要的更全面的解决方案)?

我不是在寻找最快的方法,我只是想找出理论上最正确的实现方式。

提前谢谢大家:)

最佳答案

我个人实现了一个具体的 NSObject 派生类,它实现了 UICollectionViewDataSource 以及 NSFetchedResultsControllerDelegate,它实际上将获取的结果 Controller 事件(对象插入、更新、删除)转换为 Collection View 事件(插入、更新或删除单元格)。您可以找到有关如何执行此操作的示例,我从 here 中获取了我的示例但我将它实现为一个单独的类,而不是 Collection View 上的一个类别。我发现我的类高度可重用,实际上我在我所有需要在 Collection View 中可视化托管对象的项目中使用它。 UITableViewDataSource 也可以实现类似的类。

如果您需要使用搜索谓词更新获取请求,我会将您新创建的 DataSource 类子类化,并添加逻辑以在此处更新获取请求。比如说,您添加了一个 -(void)updateSearchFilterWithText:(NSString*)text 方法,您可以在其中添加逻辑来更新获取结果 Controller 的获取请求。之后不要忘记再次执行提取并在 Collection View 上调用 reloadData!

在这种架构下, View Controller 拥有这个数据源对象。每次用户更新您的过滤文本字段(或其他小部件)之一时, View Controller 都会调用您的数据源对象的 updateSearchFilterWithText: ,其余工作稍后由它完成。

关于ios - 实现 UICollectionViewDataSource 协议(protocol)的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21729801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com