NSFetchedResultsController刷新重新获取?

Oh *_*Boy 9 iphone core-data

我想使用不同的谓词从我的NSFetchedResultsController重新获取数据,该谓词使用布尔值设置.如何刷新NSFetchedResultsController以获取一组新数据?

- (void)refreshFetchedResultsController {
    NSLog(@"refreshFetchedResultsController");

    NSError *error = nil;
    if (![[self fetchedResultsController] performFetch:&error]) {
        UIAlertView *alert = [[UIAlertView alloc]
                              initWithTitle:NSLocalizedString(@"Error loading data",
                                                              @"Error loading data")
                              message:[NSString stringWithFormat:



                                   NSLocalizedString(@"Error was: %@, quitting.", @"Error was: %@, quitting."),
                                   [error localizedDescription]]
                          delegate:self
                          cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel")
                          otherButtonTitles:nil];
    [alert show];
}
Run Code Online (Sandbox Code Playgroud)

}

哪个叫

- (NSFetchedResultsController *)fetchedResultsController {
    if (_fetchedResultsController != nil) {
        NSLog(@"i was executed.");
        return _fetchedResultsController;
    }
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    TapAppDelegate *appDelegate = (TapAppDelegate *)[[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Favorite" inManagedObjectContext:managedObjectContext];

    NSString *sectionKey = @"favname";
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"favname" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];


    if(showAll == NO){
        if(isXSelected == NO){
            NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isFirst == TRUE"]; 
            [fetchRequest setPredicate:predicate];
        }

        if(isXSelected == YES){
            NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isFirst == FALSE"]; 
            [fetchRequest setPredicate:predicate];
        }
    }

    [fetchRequest setSortDescriptors:sortDescriptors];
    [fetchRequest setEntity:entity];
    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *frc = [[NSFetchedResultsController alloc]
                                       initWithFetchRequest:fetchRequest
                                       managedObjectContext:managedObjectContext
                                       sectionNameKeyPath:sectionKey
                                       cacheName:nil];

    [sortDescriptor release];
    [sortDescriptors release];

    frc.delegate = self;
    _fetchedResultsController = frc;
    [fetchRequest release];
    return _fetchedResultsController;
}
Run Code Online (Sandbox Code Playgroud)

Cor*_*ger 28

以下是我们在应用程序中的操作方法:

// Assuming these exist
NSPredicate * predicate;
NSString * cacheName;

[[fetchedResultsController fetchRequest] setPredicate:predicate];
[NSFetchedResultsController deleteCacheWithName:cacheName];

NSError * error = nil;
[fetchedResultsController performFetch:&error];
if (error) {
    // report error
}
Run Code Online (Sandbox Code Playgroud)


小智 8

不要忘记在performFetch之前设置fetchedResultsController = nil.否则它将使用旧的.