2011-01-30 9 views
2

ナビゲーション階層には2レベルのUITableViewsがあります。最初のページにUITableViewがあり、EquipmentのすべてのインスタンスがNSFetchedResultsControllerを使って表示されます。これはうまくいきます。 2番目のページでは、Equipmentの特定の部分のすべてのNoteエンティティを取得したいので、tableViewに表示することができます。NSPredicateをCoreData-to-many関係に書く方法

NSPredicateを書いて、関連するノートだけを返すにはどうすればよいですか?

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; 
} 

答えて

4

core data documentationを見て、the predicate programming guideあなたが論理的にfalseに、このリード要求をフェッチしません

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

ような何かを持っていることを確認する必要がありますか? クエリは(equipment == (エンティティ:Equipment ...) – ebi

関連する問題