8

NSFetchedResultsControllerのデータを駆動するために使用していUITableViewControllerます。私が取得している管理対象オブジェクトの簡略化されたバージョンは、次のようになります (たとえば)。

Person:
-(BOOL)hasPet;
-(BOOL)hasDog;

Person基本的に、ペットを飼っているオブジェクトのみを表に表示したいと考えています。簡単です。述語を使用できます。さて、 という方のためにhasPet == YES、第1部hasDog == YESと第2部の2回に分けて表にまとめたいと思いhasDog == NOます。これは私が少しぼやけているところです。ここで結果コントローラーを構成します。誰かが私を正しい方向に導くのを手伝ってくれることを願っています。

- (NSFetchedResultsController *)fetchedResultsController {
if (nil != fetchedResultsController) {
    return fetchedResultsController;
}

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Homework" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"hasPet == %@", [NSNumber numberWithBool:YES]];
[fetchRequest setPredicate:predicate];

NSSortDescriptor *dogDescriptor = [[NSSortDescriptor alloc] initWithKey:@"hasDog" ascending:YES];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:dogDescriptor, sortDescriptor, nil];

[fetchRequest setSortDescriptors:sortDescriptors];

NSFetchedResultsController *aController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
aController.delegate = self;
self.fetchedResultsController = aController;

    // Release things

return fetchedResultsController;
}

注意を向ける必要があるのはソート記述子ですか?

4

1 に答える 1

15

それは簡単です!NSFetchedResultsController のイニシャライザsectionNameKeyPathに (この場合はhasDog) を指定するだけです。

ただし、これに対する 1 つの注意点は、セクション名がそれぞれ0&になること1ですが、これは簡単に修正できます。

于 2009-08-23T17:21:30.840 に答える