問題:
私の CoreData モデルには、List と Item という 2 つのエンティティがあり、1 対多の関係があります。私の現在のデザインには、システム リストとユーザー リストの 2 種類のリストがあります。システム リストは最初の起動時にシステムによって作成され、ユーザー リストはいつでもユーザーによって作成されます。
私の TVC では、関連付けられたリスト (セクション タイトルとしてリスト名を使用) によってグループ化されたすべてのアイテムを提示したいと考えています。さらに、すべてのシステム リストを常にユーザー リストの上に配置したいと考えています。
たとえば、次のように DB に list のすべてのインスタンスがあるとします。
システム一覧:受信箱
ユーザー リスト: FruitList、ShoppingList
期待される結果は次のようになります。
- 受信トレイ
- InboxItem1
- InboxItem2
- フルーツリスト
- FruitListItem1
- 買い物リスト
- アップル
- オレンジ
アプローチ:
FRC では、sectionNameKeyPath を「list_name」として FRC に設定することで、最初の目標を達成できます。しかし、システムリストの位置を修正することに問題があります(この場合、受信ボックスは常にインデックス0にあるはずです)。ただし、ユーザーが「A」から「J」で始まる名前のリストを入力すると問題が発生し、これらのリストはすべてinboxの上に配置され、「list_type」をセカンダリソートキーとして追加して修正しようとしましたが、しかし、うまくいきません。
NSFetchRequest *requst = [[NSFetchRequest alloc]initWithEntityName:ENTITY_ITEM];
NSArray *sortDescriptors = @[
[NSSortDescriptor sortDescriptorWithKey:@"belongsToList.list_name" ascending:YES],
[NSSortDescriptor sortDescriptorWithKey:@"belongsToList.list_type" ascending:NO]];
requst.sortDescriptors = sortDescriptors;
requst.predicate = [self predicateForListType:type selectedList:list];
requst.fetchBatchSize = 20;
_fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:requst managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"belongsToList.list_name" cacheName:nil];
一時的な解決策:
この問題を解決するために考えられる一時的な解決策は、プレフィックス文字列をリスト名に追加し、それらを DB から別の属性として保存し、それを sectionNameKeyPath として使用することです。
例: "0-" - システム リスト用 ("Inbox" -> "0-Inbox")
"1-" - ユーザー リスト ("ShoppingList" -> "1-ShoppingList")
のプレフィックスを削除します-tableView:titleForHeaderInSection:
。しかし、このソリューションはオーバーヘッドを生み出します。これは、すべての開発者が FRC と TBV を扱う際に直面する共通の問題であるため、はるかに優れたソリューションが存在するはずです。
入力はありますか??!!!