NSFetchedResultsControllerは、バッチサイズを取得するために5に設定されています。ロードが遅いことに気づき、SQLDebugを有効にします。何らかの理由で、一度に5行をロードしていますが、初期ロード時に100行すべてに対してこれを実行しています。ロードされると、一度に5行をロードするように見えます。フェッチバッチサイズを設定するときにNSFetchedResultsControllerがすべてのローをロードするのはなぜですか?
コンソールを見ると、クエリは20回実行されています。合計100行あります。私はこれが最初の5行で1回実行されると予想していたでしょうし、スクロールすると、より多くの行がロードされます。フェッチサイズを変更しようとしましたが、同じ動作があります。
フェッチ結果コントローラの設定は次のとおりです。
- (NSFetchedResultsController*) fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
[NSFetchedResultsController deleteCacheWithName:@"Root"];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Message" inManagedObjectContext:_context];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"conversation = %@", conversation];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"timestamp" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:5];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:_context sectionNameKeyPath:nil
cacheName:@"Root"];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
[sort release];
[fetchRequest release];
[theFetchedResultsController release];
return _fetchedResultsController;
}
NSFetchedResultsControllerで実際にフェッチを実行しているコードを投稿してください。 –
あなたは上記のものとは異なる何かをしたいですか?ありがとう! – tjg184