2010-06-18 4 views
0

J'essaie d'accéder à une propriété à partir d'une relation managedobject dans l'une de mes entités, mais je reçois toujours un objet "nil". Voici un résumé des entités et de leur relation.Accesing sous-entité reletionship/property dans NSFetchedResultsController

Entité: Maison relations: adresse (1 à 1)

Entité: Adresse Propriétés: rue (NSString) Relations: Maison (1 à 1)

Donc, fondamentalement, une "maison" peut seulement avoir une "Adresse". Je veux être en mesure de trier par la propriété de la rue de la relation d'adresse quand je vais chercher une maison. Voici le code que j'utilise mais je n'arrive pas à le faire fonctionner. Qu'est-ce que je rate?

- (NSFetchedResultsController *)fetchedResultsController { 
    // Set up the fetched results controller if needed. 
    if (fetchedResultsController == nil) { 

     MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
     NSManagedObjectContext *managedObjectContext = [appDelegate managedObjectContext]; 

     // Create the fetch request for the entity. 
     NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
     // Edit the entity name as appropriate. 
     NSEntityDescription *entity = [NSEntityDescription entityForName:@"House" inManagedObjectContext:managedObjectContext]; 
     [fetchRequest setEntity:entity]; 

     // Edit the sort key as appropriate. 
     NSString *sectionKey = @"adresse.rue"; 
     NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sectionKey ascending:YES]; 
     NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

     [fetchRequest setSortDescriptors:sortDescriptors]; 
     [fetchRequest setFetchBatchSize:20]; 

     // Edit the section name key path and cache name if appropriate. 
     // nil for section name key path means "no sections". 
     NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:sectionKey cacheName:@"House"]; 
     aFetchedResultsController.delegate = self; 
     self.fetchedResultsController = aFetchedResultsController; 

     [aFetchedResultsController release]; 
     [fetchRequest release]; 
     [sortDescriptor release]; 
     [sortDescriptors release]; 
    } 

    return fetchedResultsController; 
}  

Répondre

1

Votre code semble OK. Votre demande d'extraction est valide. S'il n'y a aucune exception, votre chemin de clé est spécifié correctement.

Je ne suis pas tout à fait sûr de ce que vous entendez par "obtenir un objet nil". Si vous voulez dire que votre contrôleur de résultats récupérés ne contient aucun objet, assurez-vous d'appeler le performFetch: avant d'essayer d'accéder à des objets. Le contrôleur sera vide jusqu'à ce que vous le fassiez.

Ce code fonctionne-t-il lorsque vous omettez les descripteurs de tri et le chemin de clé?

Questions connexes