问题描述
|
为什么“提取”表示单向关系
取回和单向之间有什么关系?
解决方法
好吧,我不确定我是否理解您的问题,但是我将在简单的域模型的背景下尝试回答。
假设您有一个
Person
类和一个Computer
类,都扩展了NSManagedObject
。 Person
通过单向关系(名为Set5ѭ的NSSet)链接到Computer
。
这可以让您在代码中说:
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 Request以查询数据库并查找具有Computer作为对象的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;