ios - 根据实体之间的关系类型创建 NSFetchedResultsController 部分

标签 ios objective-c cocoa core-data nsfetchedresultscontroller

在我正在开发的应用程序中,我有一个核心数据模型,其中包含用户小部件,其中用户可以拥有许多小部件作为他们的所有者 或者作为众多 watchers 之一观看 Widgets。对于我的应用程序中的屏幕,我想显示一个包含两个部分的表格 View :第一个部分列出给定用户拥有的小部件,而另一个显示用户正在观看的小部件。

所以基本上这可以归结为基于给定的 Widget 是否通过watchersowner 关系与用户相关的部分。有没有一种简单的方法可以实现这一目标?

最佳答案

用户和小部件之间可以有两种关系。用户实体将拥有 Widgets 和 watchedWidgets,而 Widget 实体将拥有所有者和观察者。

User                  Widget
------                --------
ownedWidgets <----->> owner
watchedWidgets <<-->> watchers

编辑

没有注意到问题标题中的NSFetchedResultsController!您遇到的问题是 FRC 使用 sectionNameKeyPath 属性来确定基于一个属性的部分。您已经对关系完成了这项工作,并且没有一个属性可以涵盖这两种情况。

我的建议是从特定的用户实例 ownedWidgetswatchedWidgets 创建两个数组,使用您在 FRC 中使用的相同排序描述符进行排序,并使用那些用于 TableView 的。当 FRC 更新行时,您可以在调用 [tableView endUpdates] 之前重新创建这些数组。无需更改数据模型以适应一种 View Controller 设计。

坦率地说,如果您已经拥有 User 对象,那么您已经通过关系获得了所需的 Widget,因此您实际上不需要获取任何东西。您可能需要考虑是否真的需要 FRC。

如果您确实需要使用 FRC - Erik H. 的回答就是正确的选择。

关于ios - 根据实体之间的关系类型创建 NSFetchedResultsController 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17668626/

相关文章:

ios - UITableView setContentInset 不起作用

ios - 将 __NSCFNumber 转换为 Int32 Swift

ios - 如何通过 Google 登录使用 Google Apps (iOS 7)

iOS Today 扩展创建为 .app 而不是 .appex

ios - NSDictionary 键/值概念

ios - 过滤字典数组时无法解析格式字符串?

objective-c - NSUInteger 和 NaN 的值?

Objective-C:如何向 NSURL 添加查询参数?

objective-c - 如何动态类型转换对象以支持应用程序的 ScriptingBridge 头文件的不同版本?

objective-c - cocoa 问题 - NSTask 不起作用