我有一个奇怪的问题。我已经设置了两个NSFetchedResultsControllers
喜欢这样
// Setup Fetched Results Controller
[self setFilesController:[PCSDataAccessor filesInDirectroy:@"" forWorkgroup:[NSNumber numberWithInteger:0] withContext:[PCSManagedObjectContext context]]];
[self setWorkgroupsController:[PCSDataAccessor memberWorkgroupsFetchedResultsControllerWithContext:[PCSManagedObjectContext context]]];
#pragma mark - Fetched Results Controller Methods
+ (NSFetchedResultsController *)memberWorkgroupsFetchedResultsControllerWithContext:(PCSManagedObjectContext *)context
{
// Create Fetch Request
NSEntityDescription * entityDescription = [NSEntityDescription entityForName:@"PCSManagedWorkgroup" inManagedObjectContext:context];
NSFetchRequest * request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
// Set workgroupID to find
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(workgroupID != 0)"];
[request setPredicate:predicate];
// Set Sort Options
NSSortDescriptor * sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
[request setSortDescriptors:[NSArray arrayWithObject:sort]];
// Create Feched Results Controller
NSFetchedResultsController * resultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:@"workgroups"];
// Return Results
return resultsController;
}
+ (NSFetchedResultsController *)filesInDirectroy:(NSString *)directoryPath forWorkgroup:(NSNumber *)workgroupID withContext:(PCSManagedObjectContext *)context
{
// Create Fetch Request
NSEntityDescription * entityDescription = [NSEntityDescription entityForName:@"PCSManagedFile" inManagedObjectContext:context];
NSFetchRequest * request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
// Set File to find
NSString * regexString = [[NSString alloc] initWithFormat:@"^%@[^/]+$",directoryPath];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"workgroup.workgroupID == %@ && name matches %@",workgroupID,regexString];
[request setPredicate:predicate];
// Set Sort Options
NSSortDescriptor * sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
[request setSortDescriptors:[NSArray arrayWithObject:sort]];
// Create Feched Results Controller
NSFetchedResultsController * resultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:[NSString stringWithFormat:@"%@/%@",workgroupID,directoryPath]];
// Return Results
return resultsController;
}
当我向核心数据添加内容时,它会在请求中返回,就像您期望的那样。我遇到的唯一问题是当我终止应用程序并将其恢复时,两个获取的请求控制器都说他们没有数据。我可以查询核心数据,他们就在那里。
我已经能够通过传入nil作为缓存名称来解决这个问题。
我希望能够使用缓存,因为我将拥有多个获取的结果控制器,并且它们可能包含大量数据集。