aneuryzm
aneuryzm

Reputation: 64834

iOS: [self.fetchedResultsController performFetch:&error]; makes my app to crash

I have a UITableViewController, and I want to feed it with the content of a core data model. However, when I fetch the content my app crashes. This is the init method (I pass a NSManagedObjectContext to it).

- (id)initInManagedObjectContext:(NSManagedObjectContext *)context
{
    self = [super initWithStyle:UITableViewStylePlain];

    if (self) {
        NSFetchRequest *request = [[NSFetchRequest alloc] init];
        request.entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:context];
        request.predicate = nil;    
        request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"idDoc" 
                                                                                     ascending:YES]];
         /*
         NSError *error = nil;
         NSManagedObject *retrievedDocument = [[context executeFetchRequest:request error:&error] lastObject];
         NSLog(@"retrievedDocument %@", retrievedDocument);
         */

        NSFetchedResultsController *frc = [[NSFetchedResultsController alloc]
                                             initWithFetchRequest:request 
                                             managedObjectContext:context 
                                               sectionNameKeyPath:nil 
                                                        cacheName:@"CollectionCache"];

        self.fetchedResultsController = frc;
        [frc release];
        [request release];


        //HERE IT CRASHES
        NSError *error;
        [self.fetchedResultsController performFetch:&error];

        if (error) {
            // Update to handle the error appropriately.
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            //exit(-1);  // Fail
        }

    }
    return self;
}

I'm sure the context is correctly passed because if I uncomment the commented snippet, the stored data are correctly printed.

My guess is that something is wrong with the fetchedResultsController.

thanks

Upvotes: 0

Views: 3012

Answers (2)

Matthias Bauch
Matthias Bauch

Reputation: 90117

The exception was related to your wrong use of performFetch:

It returns a BOOL that tells you the success of the fetch. If you get a NO back you are allowed to check the NSError object. Otherwise you must not touch it.

Probably all the methods that use &error should be used like this:

    NSError *error;
    if (![self.fetchedResultsController performFetch:&error]) {
        // Update to handle the error appropriately.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        //exit(-1);  // Fail
    }

Upvotes: 2

aneuryzm
aneuryzm

Reputation: 64834

The exception was not related to fetchedResultsController but due to the not initialized NSError

NSError *error = nil;

Upvotes: 0

Related Questions