在核心数据中添加关系

时间:2013-07-17 14:48:56

标签: ios core-data

我已经在这个单独的任务中工作了几天,试图让核心数据实体之间的关系有效。我已经实现了这一点,但现在我需要更改它,以便新属性值将其关系添加到现有对象。它是一对多的数据库。

我不确定如何向已存在的对象添加关系。因此,在添加到RoutineDetail的新对象中,如何创建与例程Entity中已存在的对象的关系?

我已经看了几个示例,这些示例都显示了如何向新添加的对象添加关系,但我需要它,因此RoutinesDetails中的新对象与Routines中已存在的值有关系。 / p>

Routines的值保存在名为RoutineText

的字符串中
rout is the NSmangedObject for the entity Routines

routDet is the NSmanagedObject for the entity RoutinesDetails

我留下了注释掉的代码,允许我在创建两个新对象时添加关系。

这是我在项目中要做的最后一件事,但它让我疯了。我将永远感激这里的解决方案。任何建议将不胜感激,因为这是最好的知识门户网站。谢谢。

 NSManagedObjectContext *context = [self managedObjectContext];

    // Create a new device
    ExcerciseInfo *info = [_fetchedResultsController objectAtIndexPath:indexPath];

//rout = [NSEntityDescription insertNewObjectForEntityForName:@"Routines" inManagedObjectContext:context];

    routdet = [NSEntityDescription insertNewObjectForEntityForName:@"RoutinesDetails" inManagedObjectContext:context];

    //Add attribute values
    //[rout setValue: RoutineText  forKey:@"routinename"];
    [routdet setValue: info.name  forKey:@"image"];

    //Create Relationship
    [rout addRoutinedetObject:routdet];

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为你的主要问题是:

  

我需要它,所以RoutinesDetails中的新对象与Routines中已经存在的值有关系。

我认为您的数据模型如下所示:

Routine <----> RoutineDetail

即。每个例程都有一个例行细节(一对一的关系)。

但这没有任何意义。您可以在Routine实体中简单地包含RoutineDetail的属性。

而不是

desiredValue = routineDetail.routine.value;

你只需拥有

desiredValue = routineDetail.value;

另外,请注意您的代码存在许多问题。第一行完全没必要,只需使用 self.managedObjectContext即可。 此外,根据惯例,您使用Capital首字母变量。这些应保留给类名。您添加关系的方法看起来也不正确。

您可以在没有方法调用的情况下添加这样的关系:

routineObject.detail = detailObject;