我正在开发一个使用 Core Data 和 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 执行此操作,或者我是否必须完全执行此操作不同的方式?
谢谢!
最佳答案
我不这么认为,因为 NSFetchedResultsController
不知道要使用哪个 Kit
来对 Part
进行排序,因为它是多对多的关系。
想一想 TreeView ,甚至是 Objective-C 继承结构,其中每个子节点只有一个父节点,但它本身可以有多个子节点。您可以轻松地将树从子节点向上递归到其父节点。但是,如果一个 child 可以有多个 parent ,那么在递归“树”(现在更像是一个图)时,它本质上并不知道选择哪个 parent 。
那么在您的数据模型中,Part
是否必须有很多 Kit
?因为如果将 Kit
和 Part
之间的多对多关系更改为一对多关系,其中一个 Kit
可以有多个 Part
,但是一个Part
只能有一个Kit,那么你可以将NSFetchedResultsController
上的sectionNameKeyPath
设置为@ “kit.source.name”
按名称排序,一切正常。
当然,如果您确实需要 Kit
和 Part
之间的多对多关系,我当然不知道您的应用是如何工作的,但是如果您这样做,那么您可能无法使用 NSFetchedResultsController
,并且必须自己实现获取 Source
和实现 UITableViewDataSource
方法:(
关于iphone - sectionNameKeyPath 通过多重关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3753607/