Выбрать объекты отношений - PullRequest
6 голосов
/ 29 июля 2011

CoreData новичка

У меня простая проблема с CoreData.В моей модели есть две сущности, которые теперь называются A и B. Субъект A имеет отношение ко многим сущностям B, которое имеет обратную связь с сущностью A.

Я получаю сущности A с этим кодом:

NSManagedObjectContext *context = [self managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"A"
                                          inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"name"
                                                           ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:descriptor]];

NSError *error = nil;
NSArray *items = [context executeFetchRequest:request error:&error];

if (error) /* ... */;

for (id item in items)
{
    /* ... */
}

[request release];
[descriptor release];

Теперь я хотел бы получить в этом цикле массив всех объектов B, на которые указывает отношение A. Как я могу этого достичь?Должен ли я создать еще один запрос на выборку или есть более практичный способ?

Я искал StackOverflow и нашел похожие вопросы, но иногда слишком расплывчато.

1 Ответ

10 голосов
/ 29 июля 2011

NSFetchRequest имеет метод экземпляра, который называется -setRelationshipKeyPathsForPrefetching:.

. Этот метод принимает массив имен ключей, которые будут использоваться для предварительной выборки любых объектов, определенных в связях с этими путями ключей.Рассмотрим ваш пример, обновленный новым кодом:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
NSString *relationshipKeyPath = @"bObjects"; // Set this to the name of the relationship on "A" that points to the "B" objects;
NSArray *keyPaths = [NSArray arrayWithObject:relationshipKeyPath];
[request setRelationshipKeyPathsForPrefetching:keyPaths];

Теперь, когда вы завершите запрос на выборку, все эти объекты отношений должны быть обнаружены и готовы к работе.

...