我正在使用Core Data和NSFetchedResultsController
的应用程序上工作。模型设置是这样的:
/-----------\ /-----------\ /-----------\
|Part | |Kit | |Source |
|-----------| |-----------| |-----------|
|name | |name | |name |
|dimensions | |description| |location |
|... | |... | |... |
|-----------| |-----------| |-----------|
|kits | <<-\ |source | <<-----1 |kits |
| | \->> |parts | | |
\-----------/ \-----------/ \-----------/
因此,
Part
与 Kit
具有多对任意关系(一个零件可以在一个或多个套件中,一个套件可以包含一个或多个零件)。每个 Kit
来自一个 Source
,它可以提供一个或多个 Kit
s。我目前正在创建一个
UITableView
,它使用 NSFetchedResultsController
和所有 Part
对象的简单列表。我想将这些部分分成几个部分,每个部分都是 Source
的名称。 IE。:|-------------------------------|
|Source One |
|-------------------------------|
|Part One |
|Part Two |
|Part Three |
|-------------------------------|
|Source Two |
|-------------------------------|
|Part Four |
|Part Two |
|Part Five |
|.... |
|-------------------------------|
| O |
|-------------------------------|
由于
Part
可能来自多个 Source
,是否可以通过使用 sectionNameKeyPath 对 NSFetchedResultsController 执行此操作,还是必须以完全不同的方式执行此操作?谢谢!
最佳答案
我不这么认为,因为 NSFetchedResultsController
不知道使用哪个 Kit
对 Part
进行排序,因为它是多对多的关系。
想想树 View ,甚至是 Objective-C 的继承结构,其中每个子节点只有一个父节点,但它本身可以有多个子节点。您可以轻松地将树从子节点向上递归到其父节点。但是如果一个 child 可以有很多 parent ,那么在递归“树”(现在更像是一个图表)时,它本质上不会知道选择哪个 parent 。
那么在您的数据模型中, Part
是否必须有许多 Kit
?因为如果你把Kit
和Part
的多对多关系改成一对多的关系,一个Kit
可以有很多Part
,而一个Part
只能有一个Kit,那么你可以把sectionNameKeyPath
上的NSFetchedResultsController
设置成@"kit.source.name"
来排序按名称,一切都会正常工作。
当然,我不知道你的应用程序是如何工作的,如果你真的需要 Kit
和 Part
之间的多对多关系,但如果你这样做,那么你可能无法使用 NSFetchedResultsController
,并且必须实现获取 Source
并自己实现 UITableViewDataSource
方法:(
关于iphone - sectionNameKeyPath 通过多个关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3753607/