Vous avez un couple d'options, au moins:
- passer une référence au contrôleur d'objet géré par le contrôleur de vue parent au contrôleur de vue de l'enfant; ou,
- rendre la propriété MOC disponible auprès du délégué de l'application, qui est disponible à tout contrôleur de vue
Certains préfèrent la seconde option que vous pouvez réutiliser et réorganiser les contrôleurs de vue dans différentes hiérarchies. En déconnectant le MOC des contrôleurs parent et enfant, vous gagnez un peu plus de flexibilité de conception. En outre, si votre application doit gérer simultanément plus d'un magasin persistant, l'accès à partir d'un point central pour créer plusieurs MOC réduit la complexité du code. Une fois que vous avez le MOC dans son contrôleur de vue, vous pouvez créer votre contrôleur de résultats récupérés dans ce contrôleur de vue et appliquer des opérations dans leurs propres threads.
EDIT
Il semble que vous avez un à plusieurs entre Site
et Post
(à savoir une entité du site a de nombreuses entités postales). Votre contrôleur de vue de liste "Posts" peut inclure un objet géré site
, un ID d'objet géré siteID
ou une propriété de chaîne siteName
.
Lorsque vous appuyez sur la liste VC "Posts", définissez sa propriété site
ou siteName
et configurez le prédicat de requête en conséquence.
Par exemple, le prédicat de votre demande de récupération devrait inclure quelque chose comme site.name LIKE '%@'
en elle, par exemple:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(site.name like '%@')", self.site.name]];
[fetchRequest setPredicate:requestPredicate];
// ...
Ou vous pouvez comparer sur managed object IDs, ce qui est généralement mieux pour les comparaisons uniques:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Post" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *requestPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(site = %@)", self.siteID]];
[fetchRequest setPredicate:requestPredicate];
// ...
Dans les deux cas, vous avez filtré votre magasin de données principales pour qu'il corresponde à toutes les entités Post
ayant un nom site
ou un ID d'objet géré site
équivalent à vos critères. Une fois que vous effectuez l'extraction, ces entités résident généralement dans un NSSet*
ou NSArray*
que vous pouvez facilement utiliser comme magasin de données UITableView
, en particulier si vous utilisez un contrôleur de résultats récupérés.
Merci Alex, j'ai un peu essayé de le faire, car j'utilise un AppController où je passe entre autres les contrôleurs du MOC. En faisant cette approche (création d'une nouvelle requête), je ne suis pas sûr de savoir comment lier l'entité en fonction du résultat de la précédente (c'est-à-dire Site -> Posts, comment faire un prédicat pour se rapporter au site sélectionné). C'est ce que je voulais savoir. Merci compagnon – Doz
Encore une chose, Juste une note, mon modèle a la propriété Site qui a un NSSET de nombreux messages (c'est pourquoi j'ai eu l'idée d'un NSArray à passer) mais ouais je ne sais pas de quelle façon je devrais procéder. Vous recommandez d'utiliser MOC, mais si je peux obtenir des éclaircissements sur la façon dont il est utilisé, mapper en fonction du site sélectionné. – Doz
Je joue actuellement avec le MOC, en utilisant NSPredicate * pred = [NSPredicate predicateWithFormat: @ "(site =% d)", i]; Où i est l'objet d'entité de site que je veux comparer. De toute évidence% d n'est pas la syntaxe correcte, alors comment puis-je résoudre ce problème si je devais aller avec MOC? – Doz