Ну, я не уверен, что понимаю ваш вопрос, но я постараюсь ответить в контексте простой доменной модели.
Допустим, у вас есть класс Person
и класс Computer
, оба расширяют NSManagedObject
. Person
связан с Computer
через односторонние отношения, NSSet с именем computers
.
Это позволит вам сказать в своем коде:
Person *person = // ... (loaded from database)
NSSet *computers = person.computers;
for (Computer *computer : computers) {
// do something fun
}
Однако, поскольку это односторонние отношения, вы бы не смогли бы сделать это:
Computer *computer = // loaded from DB
Person *person = computer.person; // This line won't work
Следовательно, поскольку он не будет работать - нет обратной связи - единственный способ получить связанный класс Person - это создать запрос Fetch для запроса к базе данных и найти экземпляры Person, в которых компьютер является член.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSPredicate *predicate = // define your NSPredicate to find the Person object here
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
Вообще говоря, это раздражает . Поэтому, как правило, хорошей идеей является определение ваших отношений в двух направлениях (например, с обратным), если это возможно, что позволит вам просто выполнить:
Person *person = computer.person;