Reputation: 632
I just can´t stop searching and reading about the "changing of the predicates" but i still don´t know how to resolve my problem, so...what i have is:
1 - Several tableviews with various cells and each cell has multiple textfields.
2 - The user presses one of these textfields and a tableview(inside a popover) appears.
3 - this popoverTableview has all the core data "work" and it is suppose to provide data to insert in the pressed textfields.
4 - Everything works fine...EXCEPT the fact that i need the predicate to change every time the user passes for example from tableview1 to tableview2.
5 - Below is my NSFetchedResultsController method that is inside my popoverTableview and i have tried numerous approaches like: "if´s" ; "switches" ; also point to the textfield tag in the tableviews and nothing. I think i don´t need to set the cache to nil since it is already set to nil...also tried deleting the: if (_fetchedResultsController != nil) return _fetchedResultsController;
And nothing!!!, what do i need to understand? What i´m not getting? i´m losing days on this one.HELP!
- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil)
{
return _fetchedResultsController;
}
NSFetchRequest *fetchRequestList = [[NSFetchRequest alloc] init];
NSEntityDescription *entityList = [NSEntityDescription entityForName:@"List" inManagedObjectContext:self.managedObjectContext];
[fetchRequestLista setEntity:entityList];
TableViewOne *table1 = [[Cobertura alloc]init];
TableViewTwo *table2 = [[Cobertura alloc]init];
if (table1 textFieldShouldBeginEditing:table1.textFieldPressed)
{
fetchRequestList.predicate = [NSPredicate predicateWithFormat:@"%K IN %@", @"reference", arrayTableview1];
}
if (table2 textFieldShouldBeginEditing:table2.textFieldPressed)
{
fetchRequestList.predicate = [NSPredicate predicateWithFormat:@"%K IN %@", @"reference", arrayTableview2];
}
NSSortDescriptor *cellTitle = [[NSSortDescriptor alloc] initWithKey:@"reference" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:cellTitle, nil];
[fetchRequestLista setSortDescriptors:sortDescriptors];
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequestLista managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"referencia" cacheName:nil];
_fetchedResultsController.delegate = self;
self.fetchedResultsController = _fetchedResultsController;
return _fetchedResultsController;
}
Thanks in advance
Upvotes: 0
Views: 83
Reputation: 52
You just need to nil your FRC explicitly. Then ask the FRC to perform fetch.
Your custom-getter method for the FRC looks fine. It ensures that the predicate is different for tableview1 and tableview2, and constructs the FRC accordingly. But it does all this work only if the FRC is nil. If not, it just returns the backing instance variable _fetchedResultsController and the rest of the code is not executed at all; that's why you need to explicitly nil your FRC when switching table views.
Upvotes: 1