对象之间的CoreData关系

时间:2015-11-07 11:33:25

标签: ios objective-c core-data

我有两种从服务器检索的对象:

1)公司 2)类别

每次应用程序变为活动状态时,我都会更新服务器中的数据(删除旧数据并插入新数据)。从我的数据库中,类别和公司通过category_id连接在它们之间。 我的问题是,我可以使用category_id

连接每个公司与某个类别的关系吗?

1 个答案:

答案 0 :(得分:1)

我认为这意味着每家公司只与一个特定类别有关系。

您希望将categoryId添加到您的类别实体,并在添加类别时保存ID。

您的模型将包含许多其他属性,但以下是如何设置关系。

enter image description here

而且,检查员的关系......

enter image description here enter image description here

当然,您应该根据需要指定任何其他选项。

现在,您可以通过基于CategoryId搜索类别来设置公司实体的category关系,然后只需设置category关系。核心数据将自动处理反向关系。

现在,给定任何类别,您可以通过`类别关系知道该类别中的所有公司对象,并且给予任何公司您可以知道它所属的类别。

要按ID获取类别,您可以执行以下操作...

- (NSManagedObject*)categoryWithCategoryId:(NSString*)categoryId
                                     inMOC:(NSManagedObjectContext*)moc
                                     error:(NSError **)error {
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Category"];
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"categoryId = %@", categoryId];
    fetchRequest.fetchLimit = 1;
    return [[moc executeFetchRequest:fetchRequest error:error] firstObject];
}

要设置关系,如果你有xcode / mogenerator生成的子类,只需设置关系属性。

NSError *error = nil;
Category *category = [self categoryWithCategoryId:categoryId inMOC:moc error:&error];
if (category) {
    // If you have generated subclasses...
    company.category = category;
    // Otherwise, you can do...
    [company setValue:category forKey:@"category"];
}