3

私のアプリには、タスク リストがあり (いいえ、別の 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 タスク オブジェクトに個別の完了日フィールドを追加できます (これはまだ出荷アプリケーションではないため、データ形式を好きなように変更できます)。

4

1 に答える 1

3

これは、NSFetchedResultsController を使用している場合は不可能です。データを手動で取得し、UITableView のデリゲート メソッドを実装する必要があります。

編集:おっと、私の間違いです。これにはかなり簡単な解決策があります。2 つのソート記述子を設定します。

  • completedDate(降順)の最初のもの。このフィールドは、nil未完了のすべてのタスクで同じ ( ) です。

  • addedDate(昇順)の 2 つ目を追加します。完了日 (新しい順) で並べ替えますが、最初のセクションには completedDates がないため、追加された日付 (古い順) が使用されます。

2 番目のセクションでは、completedDate(newest first) のみを使用します。

于 2012-06-10T04:51:24.990 に答える