ios - CoreData对象之间的关系

标签 ios objective-c core-data

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

1) 公司 2) 类别

每次应用程序激活时,我都会从服务器更新数据(删除旧数据并插入新数据)。从我的数据库中,类别和公司通过 category_id 连接起来。 我的问题是,我可以使用 category_id 将每个公司与类别的关系连接起来吗?

最佳答案

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

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

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

enter image description here

而且,inspector 中的关系...

enter image description here enter image description here

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

现在,您可以通过根据 CategoryId 搜索类别来设置 Company 实体的 category 关系,然后简单地设置 category 关系。核心数据将自动处理反向关系。

现在,给定任何类别,您都可以通过“类别”关系了解该类别中的所有 Company 对象,并且给定任何公司,您可以知道它属于哪个类别。

要通过 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"];
}

关于ios - CoreData对象之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33582266/

相关文章:

ios - 按下完成按钮后使 AVPlayerViewController 继续播放

iphone - 托管对象上下文保存失败怎么办?

objective-c - 如何从核心数据中删除所有对象

swift - NSBatchDeleteResult - 不接受任何参数

ios - 设置UIButton alpha在iOS 7上无法正常工作。

objective-c - 如何在 Objective-C 中创建 C 文件中定义的结构实例

iphone - iTunes 应用程序链接无法在模拟器和 iDevices 的 safari 中打开页面

ios - Swift - 保存在 TableView 中选择的复选标记

ios - 禁用 UITableViewCell 中 UIButton 的 3D 触摸

iphone - Facebook SDK 3.5 无法登录,应用程序崩溃