2010-09-20 105 views
5

我正在使用核心數據和NSFetchedResultsController的應用程序。模型設置是這樣的:sectionNameKeyPath通過多個關係

/-----------\   /-----------\   /-----------\ 
|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 S,是有可能通過使用sectionNameKeyPath與NSFetchedResultsController要做到這一點,或者我必須這樣做完全不同的方式?

謝謝!

回答

0

我不這麼認爲,因爲NSFetchedResultsController不知道使用哪一個Kit來排序Part,因爲它是多種關係。

想一想樹視圖,甚至Objective-C繼承結構,其中每個子節點只有一個父節點,但本身可以有許多子節點。您可以輕鬆地將樹從子節點遞增到其父節點。但是如果一個孩子可能有許多父母,那麼當遞歸「樹」(現在更像一個圖)時,它本質上不知道選擇哪個父母。

那麼在你的數據模型中,Part必須有很多Kit?因爲如果你更改爲一對多的關係,其中一個Kit可以有很多Part小號KitPart之間的多對多的關係,但Part只能有一個包,那麼你可以在NSFetchedResultsController設置sectionNameKeyPath@"kit.source.name"排序按名稱,一切都會正常工作。

當然,我不知道你的應用程序是如何工作的,如果你真的需要KitPart之間的多對多的關係,但如果這樣做,那麼你可能會無法使用NSFetchedResultsController,並必須落實獲取Source S和實現自己的:(方法UITableViewDataSource