我正在开发一款使用核心数据和NSFetchedResultsController
的应用。模型设置如下:
/-----------\ /-----------\ /-----------\
|Part | |Kit | |Source |
|-----------| |-----------| |-----------|
|name | |name | |name |
|dimensions | |description| |location |
|... | |... | |... |
|-----------| |-----------| |-----------|
|kits | <<-\ |source | <<-----1 |kits |
| | \->> |parts | | |
\-----------/ \-----------/ \-----------/
因此,Part
与Kit
具有多对多的关系(一部分可以在一个或多个工具包中,而工具包可以包含一个或多个部分)。每个Kit
来自Source
,可能会提供一个或多个Kit
。
我目前正在使用UITableView
创建一个NSFetchedResultsController
,其中包含所有Part
个对象的简单列表。我想将这些部分分组,每个部分都是Source
的名称。即:
|-------------------------------|
|Source One |
|-------------------------------|
|Part One |
|Part Two |
|Part Three |
|-------------------------------|
|Source Two |
|-------------------------------|
|Part Four |
|Part Two |
|Part Five |
|.... |
|-------------------------------|
| O |
|-------------------------------|
由于Part
可能来自多个Source
,是否可以使用sectionNameKeyPath通过NSFetchedResultsController执行此操作,还是必须以完全不同的方式执行此操作?
谢谢!
答案 0 :(得分:0)
我不这么认为,因为NSFetchedResultsController
不会知道用哪Kit
来排序Part
,因为这是一个很多关系。
考虑一个树视图,甚至是Objective-C继承结构,其中每个子节点只有一个父节点,但它本身可以有许多子节点。您可以轻松地将树从子节点递增到其父节点。但是如果一个孩子可以有很多父母,那么在递归“树”(现在更像是一个图形)时,它本身并不知道选择哪个父母。
因此,在您的数据模型中,Part
必须有多个Kit
s?因为如果您将Kit
和Part
之间的多对多关系更改为多对多关系,那么Kit
可以有多个Part
s,但是{{1}只能有一个工具包,然后您可以将Part
上的sectionNameKeyPath
设置为NSFetchedResultsController
以按名称排序,一切都会正常工作。
当然,如果您真的需要@"kit.source.name"
和Kit
之间的多对多关系,我不确切知道您的应用是如何运作的,但如果您这样做,那么您可能不会能够使用Part
,并且必须实现提取NSFetchedResultsController
并自行实施Source
方法:(
答案 1 :(得分:0)
您可以使用NSFetchedResultsController为多对多关系获取此结果
看到这个答案:如何处理与NSFetchedResultsController的多对多关系?