Вам необходимо установить обратное отношение на вашем Entity, тогда, если вы используете NSPredicate
для извлечения черного, вы сможете следовать обратному отношению для получения желаемого ToyName.
Вы минимально хотите прочитать эти:
Извлечение управляемых объектов
Синтаксис строки формата предиката
Это какой-то старый код, который я получил, не идеальный и не совсем то, что вы ищете, но все еще пример использования NSPredicate
.
Это простой NSFetchRequest
, который вернет все сущности kListe, упорядоченные каким-либо образом.
- (NSFetchRequest *)requestPourListe{
NSFetchRequest *resultat = nil;
NSEntityDescription *description4Liste =
[NSEntityDescription entityForName:kListe
inManagedObjectContext:self.managedObjectContext];
resultat = [[NSFetchRequest alloc] init];
[resultat setEntity:description4Liste];
[resultat setSortDescriptors:self.sortDescriptorsPourNom];
// Si on veut faire un Fetch plus petit en mémoire (Partial Fault)
//[resultat setPropertiesToFetch:[NSArray arrayWithObject:kNom]];
return [resultat autorelease];
}
// Now time to use that request get the request
NSFetchRequest *requet4Liste = FRUtile.requestPourListe;
NSError *monErreur = nil;
// And Use it agains a NSManagedObjecContext (moc)
NSArray *lesListes = [moc executeFetchRequest:requet4Liste
error:&monErreur];
В следующем self.list
является одним из NSManagedObject, который был выбран с предыдущим запросом.
// those NSSet are set that were return from a simple relationship query
// so those set contain NSManagedObject
NSSet *desListeItems = self.liste.listeItems;
// HERE I'm fetching the relationship kRelationPrixElement on all NSManagedObject
// present in the set desListeItems (one to one relationShip)
NSSet *desPrixElements = [desListeItems valueForKey:kRelationPrixElement];
// generate the path, traverse the relationship call kRelationCommerce and
// reach it's attribute name kNom
NSString *predicateKey = [NSString stringWithFormat:@"%@.%@", kRelationCommerce, kNom];
// get an array out of one set probably not necessary
NSArray *desPrixElementsAR = [desPrixElements allObjects];
NSMutableArray *lesPrixAAfficher = [[NSMutableArray alloc] initWithCapacity:0];
for (NSString *value in self.commercesNoms) {
// in a predicate with format %K MUST be the key or keyPath and
// %@ MUST be the value you are searching for
// the predicate here is done agains a many-to-one relation
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%K MATCHES %@)", predicateKey, value];
// Now I'm applying the predicate to the array
[lesPrixAAfficher addObjectsFromArray:[desPrixElementsAR filteredArrayUsingPredicate:predicate]];
}
Есть одна вещь, которую вы должны принять во внимание при разработке своей модели и запроса на выборку, вы можете отслеживать отношения в keyPath во многих сущностях, КАК ДОЛГО КАК эти отношения to one
отношения.
Вы не можете использовать keyPath для обхода отношения ко-многим, потому что как Core Data может узнать, за какой сущностью следует следовать.
И, наконец, когда вы получили NSManagedObject, вы можете использовать точечную запись на нем, чтобы получить его свойства и отношения.