我正在尝试与我拥有的一些数据创建一对多的关系。
我有一个Project
和许多项目,我正在尝试设置控制器来保存它们,但这是我第一次使用一对多的关系而且我的脑袋即将爆炸。
这就是我的保存方法
- (void)writeProj:(NSArray *)recivedProData ItemsData:(NSArray *)itemsData {
// WRITE TO CORE DATA
NSManagedObjectContext *context = [self managedObjectContext];
for (NSDictionary *dict in recivedProData) {
Project *project = [NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:self.managedObjectContext];
project.projectNumber = [dict valueForKey:@"ProjectNumber"];
project.projectDescription = [dict valueForKey:@"Description"];
// project.items = [dict valueForKey:@""]; // this is the relationship for project
}
for (NSDictionary *dict in itemsData) {
Items *items = [NSEntityDescription insertNewObjectForEntityForName:@"Items" inManagedObjectContext:self.managedObjectContext];
items.description = [dict valueForKey:@"Description"];
items.area = [dict valueForKey:@"Area"];
items.stage = [dict valueForKey:@"Stage"];
// items.project = [dict valueForKey:@""]; // this is the relationship for items
}
NSError *error = nil;
if (![__managedObjectContext save:&error]) {
NSLog(@"There was an error! %@", error);
}
else {
NSLog(@"created");
}
[Project addItemsObject:items];
[__managedObjectContext saveOnSuccess:^{
NSLog(@"You created a relationship");
} onFailure:^(NSError *error) {
NSLog(@"There was an error! %@", error);
}];
}
所以我有一个Project
和多个Items
,我只是不知道如何设置关键字段,以便将核心数据保存为一个项目和多个项目。
所以希望我的代码有意义。如果有人能够帮我弄清楚如何正确保存它,那将非常感激。
答案 0 :(得分:1)
只需将items.project设置为等于您刚刚创建的项目NSManagedObject
items.project = project;
编辑:如果你只有一个项目,你应该将Project* project
声明移到recivedProData
for循环之外 - 你正在为每个字典制作一个项目,你说你只有一个项目永远。如果您只有一个项目,整个代码块都没有意义 - 为什么你有一个Project
数据数组,而不只是一个字典?
答案 1 :(得分:0)
我想讨论您使用Core Data GUI编辑器配置的Core Data模型。我很好奇以下代码行中名为“Items”的多个实体:
Items *items = [NSEntityDescription insertNewObjectForEntityForName:@"Items" inManagedObjectContext:self.managedObjectContext];
也许只是语义问题。但是,多个实体名称可能表示您的Core Data模型中存在问题。我会尝试解释,但这是非常抽象的东西。
虽然实体可能具有代表事物集合的关系,但实体本身实际上并不是事物的集合;实体在模型中始终是一个单独的东西,应该在代码中(以及在命名方案中)对待它。
以下是我用文字描述你的模型的方法: Project实体是一个具有称为items的关系的单一事物。项目关系是项目实体的集合(一组)(即,一对多关系)。但是每个Item实体都是单一的。
GUI编辑器中的模型是否反映了此描述?