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执行此操作,或者我是否必须以完全不同的方式执行此操作?
谢谢!
我不这么认为,因为他们NSFetchedResultsController不知道Kit用哪个来Part排序,因为这是一个多对多的关系。
想一想树视图,甚至 Objective-C 继承结构,其中每个子节点只有一个父节点,但它本身可以有许多子节点。您可以轻松地从子节点到其父节点递归树。但是,如果一个孩子可以有很多父母,那么在递归“树”(现在更像是一个图表)时,它本质上不会知道选择哪个父母。
那么在你的数据模型中,Parts 必须有很多Kits 吗?Kit因为如果你将和之间的多对多关系更改Part为一对多关系,其中 aKit可以有多个Parts,但 aPart只能有一个 Kit,那么你可以将 on 设置sectionNameKeyPath为NSFetchedResultsController按@"kit.source.name"名称排序,一切都会正常工作。
Kit当然,我并不确切知道您的应用程序是如何工作的,如果您确实需要和之间的多对多关系Part,但如果您这样做,那么您可能无法使用NSFetchedResultsController, 并且必须实现 fetching Sources 和UITableViewDataSource自己实现这些方法:(