0

我正在尝试与我拥有的一些数据建立一对多的关系。

我有一个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,我只是不知道如何设置关键字段,以便它们作为一个项目和多个项目保存到核心数据中。

所以希望我的代码是有意义的。如果有人可以帮助我弄清楚如何正确保存它,那将不胜感激。

4

2 回答 2

1

只需将 items.project 设置为与NSManagedObject您刚刚创建的项目相同

items.project = project;

编辑:如果你只有一个项目,你应该将Project* project声明移到recivedProDatafor 循环之外——你正在为每个字典制作一个项目,并且你说你只有一个项目。如果您只有一个项目,那么整个代码块毫无意义——为什么您有一组Project数据,而不仅仅是一个字典?

于 2013-09-29T00:44:29.867 回答
0

我想讨论您的 Core Data 模型,您使用 Core Data GUI 编辑器配置的模型。我很好奇以下代码行中名为“Items”的多个实体:

Items *items = [NSEntityDescription insertNewObjectForEntityForName:@"Items" inManagedObjectContext:self.managedObjectContext];

也许这只是语义问题。然而,多个实体名称可能表明您的核心数据模型中存在问题。我会尝试解释,但这是非常抽象的东西。

尽管一个实体可能具有表示事物集合的关系,但实体本身并不是真正的事物集合;实体在模型中始终是一个单一的事物,并且应该在您的代码(以及您的命名方案)中被这样对待。

以下是我将如何用文字描述您的模型: Project 实体是一个具有称为项目的关系的单一事物。项目关系是项目实体的集合(一组)(即一对多关系)。但是每个 Item 实体都是一个单一的东西。

您在 GUI 编辑器中的模型是否反映了这种描述?

于 2013-09-29T01:37:37.287 回答