2012-02-17 72 views
1

我開發的iPad應用存儲有關位置的詳細信息,其中顯示了實現代碼如下。用戶將能夠通過全部(單個部分按字母順序排列),區域明智(每個區域作爲部分)和類型明智(每種類型作爲部分)。我使用單獨的NSFetchedResultController作爲'sectionNameKeyPath'必須在初始化時給出。 我現在有2個問題。花了超過1周的搜索,但我發現創造更多相關問題的解決方案。多NSFetchedResultController單個UITable和CoreData實體設計

1)對於任何更新(例如:設定的位置爲最喜歡)給出NSFetchedResultsChangeDelete代替NSFetchedResultsChangeUpdate。

  • 許多論壇上說,它是一個已知的錯誤,如果我們使用多個fetchedResultController
  • 只有這樣我才能避免未使用委託方法,並再次每次更改取。所以完全沒有了tableview動畫。
  • 並非所有的更新提供了委託回調。 我正確的方式還是有更好的方式,我可以使用單FetchedResultController?

2)的tableview分揀類型不能與當前實體設計有效地利用FetchedResultController。當前設計使用實體位置,類型和區域。 Location to Region是一對多的關係。但是位置到類型在兩個方向上都是多對多的關係。 [我試着上傳實體設計形象,但我的名聲並不允許]

  • 類型位置關係是多到許多在這兩個方向。因爲類型是一組位置實體所以不能給sectionNameKeyPath。所以,我從類型實體獲取並獲得從該位置陣列(套)。
  • 所以numberOfRows可以從set.But它沒有下令進行計算。所以我使用比較器對它進行排序。 我不確定這是否是正確的方式,所以我要求你們所有人提供有關此實體設計的寶貴建議。

回答

0

不太清楚,但CoreData有一些集的缺陷,當涉及到更改通知(這是一個偉大的獨家功能),但我發現,NSFetchedResultsChangeDelete並不一定意味着對象已經從刪除數據庫,這意味着該對象不再可用於已獲取的對象,因爲它已被刪除或不再適合當前的謂詞(條件)。你應該檢查一下。