NSFetchedResultsController没有正确缓存

时间:2014-11-07 22:05:26

标签: ios caching nsfetchedresultscontroller

我有一个奇怪的问题。我已经设置了两个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作为缓存名称来解决这个问题。

我希望能够使用缓存,因为我将拥有多个获取的结果控制器,并且它们可能包含大量数据集。

0 个答案:

没有答案