1

比方說,我有一個核心數據存儲中的Person實體。我有由NSFetchedResultsController顯示每Person實體填充的UITableView。當然,Person實體具有name屬性,該屬性是可選的。我們想按字母順序顯示列表,A-Z。看到這個的用戶首先想看看有名人物,因爲那些人​​會更關心他們。因此,控制器在其初始化程序中採用的排序描述符必須首先顯示具有非空名稱的實體,然後顯示空名稱Person一個排序結果中取出控制器,空字符串最後

我的選擇是有限的。我只允許使用在NSString上提供的某些比較器,但這些比較器都不符合我的標準。我無法對瞬態值進行排序。我試過使用零寬度的空白作爲默認值,但核心數據顯然修剪掉空白。思考?

回答

1

在fetchedResultsController的部分並不需要對應一到一個與你在你的tableview顯示部分。現在你有類似(空),A,B,C,D等部分。但是,您可以更改視圖控制器選擇顯示部分的方式。在tableview中設置第0部分,查看fetchedResultsController中的第1部分和1-> 2,2-> 3 ...直到最後一部分(無名部分)指向部分0.

這並不複雜但它可能會增加你的代碼。所以我建議創建一個單獨的對象來處理將fetchedResultsController indexPaths和節轉換爲你的tableview的indexPaths和節。 (還要確保處理沒有「無名字」部分的情況,以及只有「無名字」部分的情況)。

如果這看起來太複雜,一個簡單的解決方案將是添加的hasName和排序由第一個屬性。讓此人的名字自定義設置器,它也將設置hasName屬性,所以你可以很容易地保持這種特性同步。

+0

我只在一個部分顯示名稱,但'hasName'建議聽起來像是可以工作的。 –

相關問題