iPhone CoreData recuperare richiesta, nozioni di base intorno a relazioni e sezioni
-
20-09-2019 - |
Domanda
Ho ottenuto quello che si spera sia una semplice domanda - ho due entità - List e ListItem - e c'è una relazione uno-a-molti istituire tra loro, tutto bene.
Il mio problema viene quando sto cercando di eseguire un fetchrequest che restituirà i listitems sezionate da un attributo della listitem. Non è possibile eseguire un fetchrequest direttamente sugli oggetti listItem perché non c'è modo di dire 'Dove List = 'xxxxx'', così ho avuto qualcosa di simile al seguente:
- (NSFetchedResultsController *)getListItems {
// Init a fetch request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"List" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"listItem.productName" ascending:YES selector:nil];
NSArray *descriptors = [NSArray arrayWithObject:sortDescriptor];
[fetchRequest setSortDescriptors:descriptors];
// Init the fetched results controller
NSError *error;
self.globalFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"listItem.productName" cacheName:@"listItems"];
self.globalFetchedResultsController.delegate = self;
if (![[self globalFetchedResultsController] performFetch:&error]) NSLog(@"Error: %@", [error localizedDescription]);
[fetchRequest release];
[sortDescriptor release];
return self.globalFetchedResultsController;
}
Ora, questo errore perché è dicendo che non posso utilizzare una relazione uno-a-molti nel descrittore di sorta - ma richiede anche che ho un descrittore di sorta, quindi non sono sicuro che il modo corretto di fare Questo. Qualsiasi aiuto sarebbe grande.
Soluzione
Se si vuole prendere e sezione ListItems, allora si dovrebbe utilizzare "ListItem" come entità per il recupero.
In questo caso, c'è un modo per dire "prendere tutti gli oggetti ListItem Dove Lista = 'xxxxx'", si chiama un predicato (NSPredicate).
Provare qualcosa di simile (dove "lista" è il nome della relazione ListItem con List):
NSPredicate *pred = [NSPredicate predicateWithFormat:@"list == %@", listObject];
[fetchRequest setPredicate:pred];
Inoltre, vedere la Guida alla programmazione predicato .