iOS核心数据如何从不同实体访问单个实体

时间:2014-02-13 00:30:45

标签: ios xcode core-data nspredicate

我有一个这样的模型:

enter image description here

如何制作,以便Entity1或Entity2(或Items)可以引用“files”实体

基本上我有很多带有id的“文件”。如果对“文件”(例如更改的名称)进行了更改,那么当任何实体引用该文件时,它应该具有更新的信息......而不必在每个实体中进行更新。

有没有办法从编辑器中执行此操作?或者我是否必须编写代码以首先获取我正在寻找的文件ID,然后一旦我有文件ID,使用我刚刚获得的ID单独请求“文件”实体?

在sql中,我可以从任何表中执行左连接。如果可以在谓词中做,那也会有用,只是不确定如何。

编辑:

所以我更新了我的模型,现在它看起来像这样:

enter image description here

我添加了“文件”的数据,然后为Entity1和Entity2

添加了数据

我的代码可以显示文件,然后是可以显示实体的代码。 这是我正在做的事情的片段:

NSEntityDescription *entityDescription = [NSEntityDescription
                                          entityForName:@"Entity1" inManagedObjectContext:context];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];

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

[entityArray enumerateObjectsUsingBlock:^(Entity1 *entity1, NSUInteger idx, BOOL *stop) {
    NSLog(@"entity1: %@", entity1.name);
}];

我如何从File for Entity1获取'name'?让我们假装名称字段是匹配字段。我需要在代码中添加什么才能获取“文件”?这假设在“Entity1”当然存在之前就存在“文件”。

我正在运行另一个类似于“getFileByName:(NSString *)name”的方法,并使用谓词执行单独的请求。这有效,但我认为有更好的方法。

1 个答案:

答案 0 :(得分:4)

您可以简单地为Files实体创建与任何其他想要引用它们的实体的关系(具有您想要的基数)。

请注意,虽然Filesid是唯一的,但CoreData提供的唯一性是objectID ==>您可以将id引用替换为文件objectID并获得相同的功能。

一些建议:

  1. 不要将id用作属性名称,它是Objective-C
  2. 中的保留字
  3. 不要以复数形式命名您的实体(例如Files - > File)它们是对象定义或类(不要考虑表格,尽管这样可能是基础结构)