0

NSFetchedResultsController によって制御されるテーブルビューの各セクションの制限を設定するにはどうすればよいでしょうか? 例: それぞれ開始日があり、異なるステージでプレイするショーがたくさんあります。それぞれのステージで次は誰なのかだけ見せたい。したがって、リクエスト全体を制限する必要はありませんが、各セクションを制限する必要があります。

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Event"];    

NSMutableArray *predicates = [NSMutableArray array];
[predicates addObject:[NSPredicate predicateWithFormat:@"startDate > %@", [NSDate date]]];    
request.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];
NSSortDescriptor *stageSort = [[NSSortDescriptor alloc] initWithKey:@"stage.id" ascending:YES];
NSSortDescriptor *dateSort = [[NSSortDescriptor alloc] initWithKey:@"startDate" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:stageSort, dateSort, nil];
[request setSortDescriptors:sortDescriptors];

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                    managedObjectContext:self.managedObjectContext
                                                                      sectionNameKeyPath:@"stage.id"
                                                                               cacheName:nil];    

テーブルビューデリゲートメソッドでそれを制限すると、この種の機能が機能しますが、フェッチが変更されてテーブルを更新しようとするとクラッシュすることがよくあります。NSFetchedResultsController には、表示されているよりも多くのオブジェクトがあり、これらを変更するアニメーションが壊れているためだと思います。

セクションごとにより効果的な制限を設定するにはどうすればよいですか? セクションごとに最初の結果のみが必要です。

4

1 に答える 1

1

一般的に、あなたのアプローチは実現可能だと思います。

テーブル更新ルーチンを修正するだけです。行を挿入する前に、それを行う必要があるかどうかロジックを確認し、そうでない場合は挿入をスキップします。

于 2012-06-02T15:12:24.497 に答える