私のアプリには、タスク リストがあり (いいえ、別の todo アプリではありません)、 をUITableView
使用してタスクを表示しNSFetchedResultsController
ます。関連する初期化コードは次のとおりです。
NSSortDescriptor *dueDateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"due" YES];
NSSortDescriptor *completionSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"completed" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:completionSortDescriptor, dueDateSortDescriptor, nil]];
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:@"completed" cacheName:nil];
これが行うことは、上部に未完了のタスクセクションがあり、最初に予定されているタスクが一番上に、後で予定されているタスクがさらに下になるようにタスクを並べ替えることです。これはすべて機能します。
ただし、これは、完了したタスクを含む 2 番目のセクションもこのように並べ替えられることを意味するため、期限が最も早いタスクが一番上に表示されます。私がやりたいのは、2 番目のセクションが逆に (降順で) 並べ替えられるように変更することですが、最初のセクションは昇順で並べ替えられたままになります。これは可能ですか?これについてどうすればいいですか?
なぜこれをやりたいのか:現在の仕組みでは、2 番目のセクションの一番上にある (したがって最も目立つ) タスクは、何年も前に完了したタスクです。ユーザーは最近完了したタスクを見たいと思う可能性が高く (誤ってチェックされていた場合はチェックを外してください)、おそらく期限がより新しいタスクはより最近完了したものです。必要に応じて、Core Data タスク オブジェクトに個別の完了日フィールドを追加できます (これはまだ出荷アプリケーションではないため、データ形式を好きなように変更できます)。