NSFetchedResultsControllerでCoreDataを使用して、UITableViewの日付セクションごとに整理されたイベントのリストを表示しています。日付には、次のように複数のイベント(セクションの行)を含めることができます。
Date 1
Event A
Event B
Event C
Date 2
Event D
Date 3
Event E
Event F
特定の日付には、任意の数のイベントが発生する可能性があります。今日の日付を含むセクションにスクロールできるようにしたい、または(今日のイベントがない場合は)最も近い日付にスクロールできるようにしたい。
NSIndexSetを作成して、今日より後の日付を含むオブジェクトの最初のインデックスを検索します。
NSDate *dateToday = [NSDate date];
NSIndexSet *datesAfterToday = [[self.fetchedResultsController fetchedObjects] indexesOfObjectsPassingTest:
^BOOL(id obj, NSUInteger idx, BOOL *stop) {
Event *event = (Event *)obj;
NSDate *dateToCheck = event.date;
NSTimeInterval interval = [dateToday timeIntervalSinceDate:dateToCheck];
if (interval <= 0) {
*stop = YES; // Only need first occurrence of date
return YES;
}
return NO;
}];
NSInteger index = [datesAfterToday firstIndex];
これにより、今日以降の最初のイベントのインデックスが得られます。たとえば、日付2が今日より後の最初の日付である場合、上記のコードフラグメントはインデックス3を取得します(イベントDの場合)。ただし、セクション1(日付2)までスクロールできるようにしたいので、セクション番号が必要です。この場合、セクション1。
したがって、問題は、絶対インデックス番号がある場合、このセクション番号を取得するにはどうすればよいですか?または、NSFetchedResultsControllerを検索してセクション番号を見つける他の方法はありますか?
どんな助けでも大歓迎です。Tx!