【发布时间】:2016-02-08 12:19:24
【问题描述】:
我有两种从服务器检索的对象:
1) 公司 2) 类别
每次应用程序激活时,我都会从服务器更新数据(删除旧数据并插入新数据)。从我的数据库中,类别和公司通过category_id 在它们之间连接。
我的问题是我可以使用category_id 将每个公司与一个类别联系起来吗?
【问题讨论】:
标签: ios objective-c core-data
我有两种从服务器检索的对象:
1) 公司 2) 类别
每次应用程序激活时,我都会从服务器更新数据(删除旧数据并插入新数据)。从我的数据库中,类别和公司通过category_id 在它们之间连接。
我的问题是我可以使用category_id 将每个公司与一个类别联系起来吗?
【问题讨论】:
标签: ios objective-c core-data
我假设这意味着每个公司只与一个特定类别有关系。
您想将categoryId 添加到您的类别实体,并在添加类别时保存 ID。
您的模型将包含许多其他属性,但这里是设置关系的方式。
而且,检查器中的关系...
当然,您应该指定您认为必要的任何其他选项。
现在,您通过根据 CategoryId 搜索 Category 来设置 Company 实体的 category 关系,然后简单地设置 category 关系。核心数据会自动处理反向关系。
现在,给定任何类别,您可以通过 `categories 关系知道该类别中的所有公司对象,并且给定任何公司,您可以知道它属于哪个类别。
要按 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"];
}
【讨论】: