Search code examples
iosobjective-cnsmanagedobjectnsfetchrequest

Why is this fetch request returning nothing


I am trying to filter some managed objects. The result though is zip.

The filter is "name". Name is an element provided by the root view to this detail view. Name logs ok :

[48582:2754928] name: To Be
[48582:2754928] predicate: name == @"name"

name = [self.detailItem valueForKey:@"name"];

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

and the FetchResultsController is as follows:

 NSError *error = nil;
    name = [self.detailItem valueForKey:@"name"];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"VerbEntity" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];
    predicate = [NSPredicate predicateWithFormat:@"name == %@",@"name"];
    NSLog(@"name: %@", name);
    fetchRequest.predicate = predicate;
    NSLog(@"predicate: %@", predicate);

 // Create the sort descriptors array.
    NSArray *sortDescriptorArray = nil;

    //  Declare sort descriptors
    NSSortDescriptor *sortDescriptorPrimary = nil;




    sortDescriptorPrimary = [[NSSortDescriptor alloc] initWithKey:@"position" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];

    //  Set sort descriptor array
    sortDescriptorArray = @[sortDescriptorPrimary];

    //  Apply sort descriptors to fetch request
    [fetchRequest setSortDescriptors:sortDescriptorArray];

   NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

    NSLog(@"fetchedObjects count: %lu", (unsigned long)fetchedObjects.count);   
    _fetchedResultsController.delegate = self;   
    return _fetchedResultsController;
}

Does anything stand out as wonky? Thanks for any help.


Solution

  • It looks like your _fetchedResultsController doesn't have the fetch request set on it. Maybe there's more than this code snippet is showing... But this might work

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"VerbEntity"];
    request.predicate = [NSPredicate predicateWithFormat:@"name == %@",@"name"];
    
    // Note: Sort descriptors available depend on the backing store type.
    NSSortDescriptor *sortDescriptorPrimary = [[NSSortDescriptor alloc] initWithKey:@"position"        
                                                                          ascending:YES 
                                                                           selector:@selector(localizedCaseInsensitiveCompare:)];
    
    request.sortDescriptors = @[sortDescriptorPrimary];
    
    // The request needs to be set on the controller.
    NSFetchedResultsController *controller =
        [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                            managedObjectContext:self.managedObjectContext
                                              sectionNameKeyPath:nil
                                                       cacheName:nil];
    // The controller needs to perform the fetch.
    [controller performFetch:nil];  // Optionally pass in an NSError.
    controller.delegate = self;
    _fetchedResultsController = controller;
    return controller;