user2650439
user2650439

Reputation: 207

TableView keeps empty after using NSFetchedResultsController

I've tried to use NSFetchedResultsController in order to display sections to my tableView. But now my tableView keeps empty.

 @property (nonatomic,strong) NSManagedObjectContext* managedObjectContext;
@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;


- (NSManagedObjectContext *)managedObjectContext
{
    NSManagedObjectContext *context = nil;
    id delegate = [[UIApplication sharedApplication] delegate];
    if ([delegate performSelector:@selector(managedObjectContext)]) {
        context = [delegate managedObjectContext];
    }
    return context;
}

- (void)viewDidLoad
{
   self.fetchedResultsController = nil;
    self.fetchedResultsController.delegate = nil;

}


- (NSFetchedResultsController *)fetchedResultsController {

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

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];


    // Create and configure a fetch request with the plant entity.
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Travel" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

    // Create the sort descriptors array.
    NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:nameDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

    // Create and initialize the fetch results controller.
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"country" cacheName:@"country"];
    self.fetchedResultsController = aFetchedResultsController;
    _fetchedResultsController.delegate = self;

    return _fetchedResultsController;
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return [[self.fetchedResultsController sections] count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    id <NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsController sections][section];
    return [sectionInfo numberOfObjects];
}


- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { return @""; }

I followed a tutorial but the tableView is empty now. My tableView worked before fine (with coreData). Maybe someone knows an answer to my question. Thanks.

Upvotes: 0

Views: 597

Answers (1)

Mike Pollard
Mike Pollard

Reputation: 10195

You appear to have forgotten to do this after constructing your NSFetchedResultsController:

NSError *error;
BOOL success = [_fetchedResultsController performFetch:&error];

Upvotes: 2

Related Questions