Ios 基于实体之间的关系类型创建NSFetchedResultsController节

Ios 基于实体之间的关系类型创建NSFetchedResultsController节,ios,objective-c,cocoa,core-data,nsfetchedresultscontroller,Ios,Objective C,Cocoa,Core Data,Nsfetchedresultscontroller,在我正在开发的一个应用程序中,我有一个核心数据模型,其中包含用户和小部件,用户可以拥有多个小部件作为其所有者,也可以作为多个观察者之一观察小部件。对于我的应用程序中的屏幕,我想显示一个包含两部分的表视图:第一部分列出给定用户拥有的小部件,而另一部分显示用户正在观看的小部件 因此,基本上这归结为基于给定小部件是否通过观察者或所有者关系与用户相关的部分。有没有一种简单的方法来实现这一点?这取决于您的数据模型。我认为可以通过使用中间对象UserWidget并为关系类型、所有者或观察者设置属性(如rel

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


因此,基本上这归结为基于给定小部件是否通过观察者或所有者关系与用户相关的部分。有没有一种简单的方法来实现这一点?

这取决于您的数据模型。我认为可以通过使用中间对象
UserWidget
并为关系类型、所有者或观察者设置属性(如
relationshipType
)来实现这一点。然后您可以在
UserWidgets
上获取,并且
sectionNameKeyPath
可以是
relationshipType

您可以在用户和小部件之间建立两种关系。用户实体将拥有ownedWidgets和watchedWidgets,而小部件实体将拥有所有者和观察者

User                  Widget
------                --------
ownedWidgets <----->> owner
watchedWidgets <<-->> watchers
用户小部件
------                --------
ownedWidgets>owner
watchedWidgets观察者
编辑

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

我的建议是从特定的用户实例
ownedWidgets
watchedWidgets
创建两个数组,使用FRC中使用的相同排序描述符进行排序,并将它们用于表视图。当FRC更新行时,您可以在调用[tableView EndUpdate]之前重新创建这些数组。无需更改数据模型以适应一种视图控制器设计

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


如果你真的需要使用FRC-Erik H.的答案,那将是一个好办法。

这实际上似乎是一个很好的解决方案。也许有一点Database-y,但如果UserWidget连接实体只是常规关系的一个附加冗余级别,那么它可能会工作;这不是问题所在。问题是,我想根据小部件是否与
ownedWidgets
watchedWidgets
属性相关,将它们划分为多个部分。是的,更新的建议是我过去是如何解决这一问题的——如果你想自己管理更改,这是一个好方法。然而,如果你真的想使用FRC,我认为我的答案是可行的。这似乎是建议的最佳方法。今晚我将尝试实施这种方法。