Cela m'a rendu fou toute la journée. J'ai un bug étrange que je pense avoir réduit à un NSPredicate. J'ai deux entités: Liste et Personne. La liste a une relation "to-many" avec les personnes appelées "Person" et "Person" avec une relation "to-many" aux listes "List".Relations de données de base, NSPredicates et NSFetchedResultsController
Je passe à mon un contrôleur TableView un objet List. Je veux ensuite que le contrôleur de table affiche les Personnes qui appartiennent à cet objet de liste. Je fais cela avec un NSFetchedResultsController.
Lors de la configuration de NSFRC, j'ai le code suivant (gestion de la mémoire omise pour plus de clarté). La liste en question est myList
:
// Create the request and set it's entity
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
// Create a predicate to get the persons that belong to this list
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList];
// Assign this predicate to the fetch request
[fetchRequest setPredicate:predicate];
// Define some descriptors
NSSortDescriptor *locationDescriptor = [[NSSortDescriptor alloc] initWithKey:@"location" ascending:YES];
NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:locationDescriptor, lastNameDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Create and initialize the fetch results controller.
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"location" cacheName:nil];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;
Je pense que le problème est avec cette ligne (car il disparaît si je le supprimer):
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList];
Ce qui se passe est quand la vue parent passe myList
à le contrôleur de tableview, le simulateur se bloque juste. Aucun journal de plantage dans la console ou quoi que ce soit. C'est presque comme si l'on se contentait de prendre AGES pour régler la NSFRC.
Est-ce un problème avec le prédicat que j'utilise?
Vous devriez avoir modifié votre message original pour le demander. – indragie