2

NSManagedObjectは3つの属性を持つ を持っています:

  1. ヘッダー ( NSString *)
  2. タイトル ( NSString *)
  3. お気に入り ( BOOL)

次のスキームを使用して、これらのオブジェクトのリストを表示したいと思います。

  • お気に入り
    • オブジェクト 1
    • オブジェクト 3
  • ヘッダー
    • オブジェクト 2
    • オブジェクト 3
  • B ヘッダー
    • オブジェクト 1
    • オブジェクト 4

を使用してそれを行う方法はありますNSFetchedResultsControllerか?で並べ替えてみましたがfavoriteheaderオブジェクトがお気に入りセクションに割り当てられると、ヘッダーのセクションに表示されないため、役に立ちませんでした。私が使用できるトリックはありますか?フェッチを 2 回実行し、結果を 1 つのネストされた配列に再フォーマットする必要がありますか?

4

1 に答える 1

1

2つを分けて使うNSFetchedResultsController's

次に、さまざまなデリゲート メソッドのそれぞれでこれを説明する必要があります。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [[self.mainFetchedResultsController sections] count] + 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (section == 0) {
        return [[[self.favFetchedResultsController sections] objectAtIndex:section] numberOfObjects];
    } else {
        return [[[self.mainFetchedResultsController sections] objectAtIndex:section - 1] numberOfObjects];
    }
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{    
    if (section == 0) {
        return @"Favourites";
    } else {
        id <NSFetchedResultsSectionInfo> sectionInfo = [[self.mainFetchedResultsController sections] objectAtIndex:section - 1];
        return [sectionInfo name];
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    Object *object = nil;

    if (indexPath.section == 0) {
        object = [self.favFetchedResultsController objectAtIndexPath:indexPath];
    } else {
        NSIndexPath *mainIndexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section -1];
        object = [self.mainFetchedResultsController objectAtIndexPath:mainIndexPath];
    }

    UITableViewCell *cell = ...

    ...

    return cell;
}
于 2012-05-22T09:08:12.957 に答える