我正在使用Core Data和NSFetchedResultsController的应用程序上工作。模型设置是这样的:

/-----------\          /-----------\          /-----------\
|Part       |          |Kit        |          |Source     |
|-----------|          |-----------|          |-----------|
|name       |          |name       |          |name       |
|dimensions |          |description|          |location   |
|...        |          |...        |          |...        |
|-----------|          |-----------|          |-----------|
|kits       | <<-\     |source     | <<-----1 |kits       |
|           |     \->> |parts      |          |           |
\-----------/          \-----------/          \-----------/

因此,PartKit 具有多对任意关系(一个零件可以在一个或多个套件中,一个套件可以包含一个或多个零件)。每个 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 不知道使用哪个 KitPart 进行排序,因为它是多对多的关系。

想想树 View ,甚至是 Objective-C 的继承结构,其中每个子节点只有一个父节点,但它本身可以有多个子节点。您可以轻松地将树从子节点向上递归到其父节点。但是如果一个 child 可以有很多 parent ,那么在递归“树”(现在更像是一个图表)时,它本质上不会知道选择哪个 parent 。

那么在您的数据模型中, Part 是否必须有许多 Kit ?因为如果你把KitPart的多对多关系改成一对多的关系,一个Kit可以有很多Part,而一个Part只能有一个Kit,那么你可以把sectionNameKeyPath上的NSFetchedResultsController设置成@"kit.source.name"来排序按名称,一切都会正常工作。

当然,我不知道你的应用程序是如何工作的,如果你真的需要 KitPart 之间的多对多关系,但如果你这样做,那么你可能无法使用 NSFetchedResultsController ,并且必须实现获取 Source 并自己实现 UITableViewDataSource 方法:(

关于iphone - sectionNameKeyPath 通过多个关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3753607/

10-08 20:59