How NSFetchedResultsController Works

First of all, thank you very much if you take the time to help me!

I found out about NSFetchedResultsController, and I'm trying to understand it as much as I can, but some things about this really confuse me. This code is if from a tutorial that I found on the Internet. Basically, I have the simplest set of settings created using really fancy methods like

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
    // The fetch controller is about to start sending change notifications, so prepare the table view for updates.
    [self.tableView beginUpdates];
}


- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {

    UITableView *tableView = self.tableView;

    switch(type) {

        case NSFetchedResultsChangeInsert:
            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;

        case NSFetchedResultsChangeDelete:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;

        case NSFetchedResultsChangeUpdate:
            [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
            break;

        case NSFetchedResultsChangeMove:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            // Reloading the section inserts a new row and ensures that titles are updated appropriately.
            [tableView reloadSections:[NSIndexSet indexSetWithIndex:newIndexPath.section] withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}

 (NSFetchedResultsController *)fetchedResultsController {

    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription 
        entityForName:@"FailedBankInfo" inManagedObjectContext:_context];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] 
        initWithKey:@"details.closeDate" ascending:NO];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

    [fetchRequest setFetchBatchSize:20];

    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;    

}
  • Do I need to create a new selected controller for different controllers each time? For example, if I have a list of enterprises in one view of the list. then I click on one of them and bring me to the list of employees in this ocmpany, should I use another fetchedViewController, since I need to determine the entity key correctly? See above for my implementation.

  • . , VC. init NSFetchedResultsController. addButtonPressed, ( ). Entity myEntity = [NSEntityDescription insertNNewObjectForEntityForName:@"Entity" inManagedObjectContext:context_]; . , , . , - (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath - (UITableViewCell *)tableView:(UITableView *)tableView . ? , - , Entity, . , -

  • ? , < >

    (void) controller: (NSFetchedResultsController *) controller didChangeSection: (id NSFetchedResultsSectionInfo) sectionInfo atIndex: (NSUInteger) sectionIndex forChangeType: (NSFetchedResultsChangeType) type {

    switch(type) {
    
        case NSFetchedResultsChangeInsert:
            [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
            break;
    
        case NSFetchedResultsChangeDelete:
            [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
    

    } Edit: Holy $# $, . hasChangeSection: (id (, ) NSFetchedResultsSectionInfo ( ))

4 . , .. NSFetchedResultcontroller ? , , ViewControllers? !

+5
1

, :

  • , , , NSFetchedResultsController. NSFetchedResultsController, , tableView, №2.

  • , [NSEntityDescription insertNNewObjectForEntityForName:@"Entity" inManagedObjectContext:context_]; TableViewController, , NSFetechedResultsController , , NSFetchedResultsChangeInsert controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:, NSFetchedResultsController - , , CoreData , , . , insertNewObjectForEntityName viewController, , viewController, .

  • didChangeSection: delegate NSFetchedResultsController , . . # 4, .

  • NSFetechedResultsController "" , , NameKeyPath: init. , . , # 3 № 2, , , NSFetchedResultsController, didChangeSection:.

    /li >

NSFetchedResultsController CoreData , , TableView. , , .

+4

All Articles