我遇到了 UITableViews 和多对多关系的问题。
我有两个类,A 和 B,它们都扩展 NSManagedObject 并存在于 Core Data 中。每个与另一个之间都有一对多的关系:
A<<-->>B
我想使用 A 类的对象作为 UITableView 的部分,并将 B 对象集作为 TableView 中的“数据行”。这可能吗?实现这一目标的最佳方法是什么?最好我想使用 NSFetchedResultsController 来管理 UITableView 呈现的数据,但到目前为止我还无法想出有效的谓词和部分名称键路径。
最佳答案
您不能使用获取结果 Controller 来执行此操作。
如果 A
对象是节名称,并且每个 B
对象都有许多 A
关系,则每个 B
可以在表的不同部分多次出现。核心数据实际上是围绕唯一对象的想法建立的,并且 TableView 的所有样板代码都假设每一行代表一个唯一对象。在这种情况下,即使计算行数也会很困难,并且无法设置sectionNameKeyPath,因为它在任何时候都可能有多个值。
您需要手动配置这一切。您必须获取 A
对象,然后设置部分标题,然后您必须获取每个 A.bObjs
并对每个对象中的行进行计数和排序部分完全单独。删除现有的 B
对象可能会很困难,因为它可能会同时触发多行的删除。
我强烈建议您重新考虑您的设计。节和节标题不应表示托管对象,而是基于行对象的属性之一由行表示的托管对象的分组。这里您真正想要的是主从 View 层次结构。顶部表格 View 将显示所有 A
对象。当选择一行时,它会加载第二个表格 View ,其中显示与所选 A
对象相关的所有 B
对象。
关于iphone - UITableView 和 Core Data 的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6331200/