2013-07-17 122 views
0

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

我不知道如何将关系添加到已存在的对象。因此,在添加到RoutineDetail的新对象中,我将如何创建与例程实体中已存在的对象的关系?

我看过几个例子都显示如何添加关系到新添加的对象,但我需要它,因此RoutinesDetails中的新对象与Routines中已存在的值有关系。

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

什么是不工作? – Mundi

+1

昨天你问的不是这个问题吗? http://stackoverflow.com/questions/17686651/core-data-relationship-add-to-existing-value –

回答

0

你的主要问题的陈述,我认为,在这里:

我需要它,这样在RoutinesDetails新对象与已经存在于例程价值的关系。

我相信你的数据模型是这样的:

Routine <----> RoutineDetail 

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

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

而不是

desiredValue = routineDetail.routine.value; 

,你也只会

desiredValue = routineDetail.value; 

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

您可以添加这样的关系,没有一个方法调用:

routineObject.detail = detailObject; 
+0

没有我的数据模型是1到很多.....所以你建议只是添加一个额外的属性到RoutineDetail? – Sgillon

+0

什么不工作是我不知道如何添加关系到已存在的对象。因此,在添加到RoutineDetail的新对象中,我将如何创建与例程实体中已存在的对象的关系? – Sgillon

+0

如果将新对象添加到多对多关系中,则可以在实体的实例上使用形式为“addRoutineObject:”的核心数据生成方法。要将一对一关系添加到现有对象,只需在我的答案底部使用点符号。 – Mundi