Быстрый вопрос о NSFetchRequest и отношениях - PullRequest
0 голосов
/ 06 июня 2011

В моей модели базовых данных у меня есть сущность Session and Exercise.

Session имеет отношение ко многим с Exercise (также существует обратная связь один-один).

В своей выборке я пытаюсь найти все объекты Session, связанные с текущим упражнением.

Я использую следующий код, который не работает.

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat: @"exercise = %@", exercise.name]];
NSEntityDescription *sessionEntity = [NSEntityDescription entityForName:@"Session" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:sessionEntity];

NSError *error = nil;
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"Fetch error: %@", error);
self.sessionArray = results;

Вот моймодель данных:

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 июня 2011

Во-первых, из скриншота видно, что атрибут вашей связи сущности Session называется exercises, а не exercise.

Кроме того, мне кажется, что это сработает, если вы будете искать не сущность Session, а сущность Exercise, а затем выполнять итерацию по полученному массиву для извлечения сеансов.

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:"name == %@", exerciseName]];
NSEntityDescription *exerciseEntity = [NSEntityDescription entityForName:@"Exercise" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:exerciseEntity];
...    
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
...
NSMutableArray *mutableSessionArray = [NSMutableArray array];
for (Exercise *ex in results) {
    Session *session = [ex exercises];
    if (session) [mutableSessionArray addObject:session];
}
self.sessionArray = [NSArray arrayWithArray:mutableSessionArray];

Взаимосвязь сущности Упражнения, называемой exercises, можно назвать session для ясности.Я бы порекомендовал переименовать его.

Кстати, вы также можете написать = вместо ==, насколько я знаю, они эквивалентны.В разделе Руководство по программированию предиката о синтаксисе строки формата предиката написано:

=, ==
The left-hand expression is equal to the right-hand expression.
0 голосов
/ 06 июня 2011

В вашем предикате вы используете =, == - оператор сравнения. Я думаю, что там ты ошибаешься.

Источник: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSPredicate_Class/Reference/NSPredicate.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...