在我正在开发的应用程序中,我有一个核心数据模型,其中包含用户和小部件,其中用户可以拥有许多小部件作为他们的所有者或观看小部件作为众多观察者之一。对于我的应用程序中的屏幕,我想显示一个包含两个部分的表格视图:第一个列出给定用户拥有的小部件,而另一个显示用户正在观看的小部件。
所以基本上这归结为基于给定小部件是否通过观察者或所有者关系与用户相关的部分。有没有一种简单的方法可以实现这一目标?
在我正在开发的应用程序中,我有一个核心数据模型,其中包含用户和小部件,其中用户可以拥有许多小部件作为他们的所有者或观看小部件作为众多观察者之一。对于我的应用程序中的屏幕,我想显示一个包含两个部分的表格视图:第一个列出给定用户拥有的小部件,而另一个显示用户正在观看的小部件。
所以基本上这归结为基于给定小部件是否通过观察者或所有者关系与用户相关的部分。有没有一种简单的方法可以实现这一目标?
这取决于您的数据模型。我认为一种方法可以通过使用中间对象并为关系类型、所有者或观察者UserWidget
设置属性(如)来实现。relationshipType
然后你的 fetch 可能是 onUserWidgets
并且 the sectionNameKeyPath
could be relationshipType
。
用户和小部件之间可以有两种关系。用户实体将拥有拥有小部件和监视小部件,而小部件实体将拥有所有者和观察者。
User Widget
------ --------
ownedWidgets <----->> owner
watchedWidgets <<-->> watchers
编辑
没有注意到NSFetchedResultsController
问题标题中的!您遇到的问题是sectionNameKeyPath
FRC 使用该属性来确定基于一个属性的部分。您已经使用关系完成了这项工作,并且没有一个属性可以涵盖这两种情况。
我的建议是从特定的 User 实例ownedWidgets
和中创建两个数组watchedWidgets
,使用您在 FRC 中使用的相同排序描述符进行排序,并将它们用于表视图。当 FRC 更新行时,您可以在调用 [tableView endUpdates] 之前重新创建这些数组。无需更改数据模型以适应一种视图控制器设计。
坦率地说,如果您已经拥有 User 对象,那么您已经通过关系获得了所需的 Widget,因此您实际上不需要获取任何东西。您可能需要考虑是否真的需要 FRC。
如果您确实需要使用 FRC - Erik H. 的答案将是您的最佳选择。