iphone - sectionNameKeyPath 通过多重关系

标签 iphone cocoa-touch core-data ios nsfetchedresultscontroller

我正在开发一个使用 Core Data 和 NSFetchedResultsController 的应用程序。模型设置是这样的:

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

因此,PartKit 具有多对任何关系(一个零件可以在一个或多个套件中,一个套件可以包含一个或更多部分)。每个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?因为如果将 KitPart 之间的多对多关系更改为一对多关系,其中一个 Kit 可以有多个 Part,但是一个Part只能有一个Kit,那么你可以将NSFetchedResultsController上的sectionNameKeyPath设置为@ “kit.source.name” 按名称排序,一切正常。

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

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

相关文章:

objective-c - 如何在 UIMarkupTextPrintFormatter 中添加图片?

ios - CoreData 堆栈 [child(background)/parent(thread 1)] setup mergeChangesFromContextDidSaveNotification 不更新 UI(tableview)

ios - 将从核心数据中获取的数据分配给 UIPickerView

iphone - 我如何为我的 iPhone 应用程序集成谷歌地图 API?

iphone - 某些 iphone sip 应用程序使用什么技巧与 UDP only sip 服务器通信?

iphone - UITableView 中的实时搜索

iphone - 基于自定义线性渐变的UILabel文本颜色

objective-c - 反向地理编码当前位置

cocoa-touch - 如何定位UIView?

swift - 保存核心数据属性时将索引从0移动到1