核心数据中的获取和单向关系之间的关系是什么?

时间:2011-04-14 05:03:33

标签: objective-c core-data relational-database

为什么“获取”意味着单向关系

fetch和one way之间有什么关系?

1 个答案:

答案 0 :(得分:1)

好吧,我不确定我理解你的问题,但我会尝试在一个简单的域模型中回答。

假设您有一个Person类和一个Computer类,它们都扩展为NSManagedObjectPerson通过单向关系链接到Computer,名为computers的NSSet。

这将允许您在代码中说:

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类的唯一方法是构建一个获取请求来查询数据库并找到将计算机作为构件。

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;