2011-01-30 3 views
2

J'ai 2 niveaux de UITableViews dans une hiérarchie de navigation. Sur la première page est un UITableView qui affiche toutes les instances de Equipment en utilisant un NSFetchedResultsController qui fonctionne très bien. Sur la deuxième page, je veux récupérer toutes les entités Note pour un morceau spécifique de Equipment afin que je puisse les montrer dans un tableView.Comment écrire une relation NSPredicate pour CoreData to-many

Comment écrire un NSPredicate pour ne renvoyer que les notes pertinentes?

Table Relationship

- (NSFetchedResultsController *)fetchedResultsController { 

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

    //Init Fetch Request 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

    //Entity the NSFetchedResultsController will be managing 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Note" 
               inManagedObjectContext:self.myContext]; 
    [fetchRequest setEntity:entity]; 

    //Sort Descriptors 
    NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"noteTime" 
                    ascending:YES];//Primary Sort 
    NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"noteText" 
                    ascending:YES];//Secondary Sort 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, 
                   sortDescriptor2, 
                   nil]; 

    //Set Sort Descriptors 
    [fetchRequest setSortDescriptors:sortDescriptors]; 

    // limit Fetch to notes that belong to myEquipment 
    //self 
    // NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"item.name like '%@'", self.item.name]]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:PREDICATE GOES HERE]; 
    [fetchRequest setPredicate:predicate]; 



    [fetchRequest setFetchBatchSize:10]; 

    NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest  
                      managedObjectContext:self.myContext 
                      sectionNameKeyPath:nil 
                        cacheName:@"Equipment"]; 
    //Set the Delegate Property 
    frc.delegate = self; 
    _fetchedResultsController = frc; 

    //Release Local Memory 
    [sortDescriptor1 release]; 
    [sortDescriptor2 release]; 
    [sortDescriptors release]; 
    [fetchRequest release]; 

    return _fetchedResultsController; 
} 

Répondre

4

Jetez un oeil à la core data documentation et the predicate programming guide vous devriez voir que vous avez à faire quelque chose comme

Equipment *equipment = // your equipment was passed from the previous tableview controller 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"equipment == %@", equipment]; 
+1

Ne est-ce conduit à une fausse demande logiquement chercher? La requête serait (équipement == <équipement: 0x00000000> (entité: équipement ...) – ebi

Questions connexes