UIDocumentを使用してコアデータにアクセスし、メインUIをブロックしないようにバックグラウンドスレッドでNSFetchedResultsControllerをセットアップしようとしています。uidocumentのmanagedobjectcontextを使用しているが、子は使用していない場合は機能します。私はスタックオーバーフローでここにある答えの1つからこのコードのいくつかを取りましたが、fetchedresultscontrollerでそれを動作させることができません。
[ZH peopleDocumentusingBlock:^(UIManagedDocument *peopleDoc){
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
context.parentContext = peopleDoc.managedObjectContext;
[context performBlock:^{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"key" ascending:YES]];
[NSFetchedResultsController deleteCacheWithName:nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"imageurl.length>0"];
request.predicate = predicate;
NSError *error = nil;
if(!self.totalNumberOfPeople) //set total number of people for this fetch used for show more records
{
self.totalNumberOfPeople = [context countForFetchRequest:request error:&error];
NSLog(@"total number of people -> %d",self.totalNumberOfPeople);
}
self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:@"peopleCache"];
dispatch_async(dispatch_get_main_queue(), ^{
[self.delegate refreshPeoplelTableview];
NSLog(@"fetched objects -> %d",[self.fetchedResultsController.fetchedObjects count]);
NSLog(@"total number of people -> %d",self.totalNumberOfPeople);
});
}];
}];
実際context countforfetchrequest
にはフェッチしますが、fetcheresultscontrollerはしません。
前もって感謝します!