sectionNameKeyPath通过多个关系

Nea*_*l L 5 iphone cocoa-touch core-data nsfetchedresultscontroller ios

我正在开发一个使用Core Data和一个应用程序的应用程序NSFetchedResultsController.模型设置如下:

/-----------\          /-----------\          /-----------\
|Part       |          |Kit        |          |Source     |
|-----------|          |-----------|          |-----------|
|name       |          |name       |          |name       |
|dimensions |          |description|          |location   |
|...        |          |...        |          |...        |
|-----------|          |-----------|          |-----------|
|kits       | <<-\     |source     | <<-----1 |kits       |
|           |     \->> |parts      |          |           |
\-----------/          \-----------/          \-----------/
Run Code Online (Sandbox Code Playgroud)

因此,a与a Part具有多对多的关系Kit(一个部件可以在一个或多个套件中,并且套件可以包含一个或多个部件).并且每个Kit来自Source可以提供一个或多个Kits的a.

我目前正在创建一个UITableView使用NSFetchedResultsController带有所有Part对象的简单列表的.我想将这些部分分成几个部分,每个部分都是一个Source名字.即:

|-------------------------------|
|Source One                     |
|-------------------------------|
|Part One                       |
|Part Two                       |
|Part Three                     |
|-------------------------------|
|Source Two                     |
|-------------------------------|
|Part Four                      |
|Part Two                       |
|Part Five                      |
|....                           |
|-------------------------------|
|             O                 |
|-------------------------------|
Run Code Online (Sandbox Code Playgroud)

由于a Part可能来自多个Sources,是否可以使用sectionNameKeyPath通过NSFetchedResultsController执行此操作,或者我是否必须以完全不同的方式执行此操作?

谢谢!

Dan*_*yon 0

我不这么认为,因为他们NSFetchedResultsController不知道Kit用哪个来Part排序,因为这是一个多对多的关系。

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

那么在你的数据模型中,Parts 必须有很多Kits 吗?Kit因为如果你将和之间的多对多关系更改Part为一对多关系,其中 aKit可以有多个Parts,但 aPart只能有一个 Kit,那么你可以将 on 设置sectionNameKeyPathNSFetchedResultsController@"kit.source.name"名称排序,一切都会正常工作。

Kit当然,我并不确切知道您的应用程序是如何工作的,如果您确实需要和之间的多对多关系Part,但如果您这样做,那么您可能无法使用NSFetchedResultsController, 并且必须实现 fetching Sources 和UITableViewDataSource自己实现这些方法:(