Core data 基于现有托管对象属性创建新对象的关系

Core data 基于现有托管对象属性创建新对象的关系,core-data,save,entity,relationship,managedobjectcontext,Core Data,Save,Entity,Relationship,Managedobjectcontext,我有以下数据模型: entityA<-->>entityB<<-->>entityC entityD<-->>entityE 然后,我在此处的“保存”操作中保存到上下文: - (IBAction)save:(id)sender { EntityD *newEntityD = [NSEntityDescription insertNewObjectForEntityForName:@"EntityD"

我有以下数据模型:

entityA<-->>entityB<<-->>entityC
entityD<-->>entityE
然后,我在此处的“保存”操作中保存到上下文:

- (IBAction)save:(id)sender {
    EntityD *newEntityD = [NSEntityDescription insertNewObjectForEntityForName:@"EntityD"
                                                      inManagedObjectContext:self.managedObjectContext];

    [newEntityD setValue:self.UILabel2.text forKey:@"nameD"];    

    EntityE *newEntityE = [NSEntityDescription insertNewObjectForEntityForName:@"EntityE"
                                                      inManagedObjectContext:self.managedObjectContext];

    [newEntityE setValue:self.UILabel1.text forKey:@"nameE"];

    NSError *anyError = nil;
    BOOL savedSuccessfully = [self.managedObjectContext save:&anyError];
    if (!savedSuccessfully) {

    }
}
这适用于设置nameD和nameE。我正在尝试为EntityD和EntityE创建新创建的对象之间的关系。假设entityE和entityD之间的关系是toD。我已尝试了“保存”操作:

  [newEntityE setValue:self.UILabel2.text forKey:@"toD"];
但我有一个错误: “NSInvalidArgumentException”,原因:“-[\uu NSCFString managedObjectContext]:发送到实例0x10939fd00的选择器无法识别”


如何在新创建的对象之间建立关系?

我假设您使用的是
NSManagedObject
子类。在这种情况下,我建议不要使用繁琐的
setValue
调用,而是使用方便的点表示法

toD
的关系指向一个
EntityD
对象,因此它不能是文本字段中的字符串。改为设置entityD:

newEntityE.toD = newEntityD; 

当您通过关系“属性”将EntityD分配给EntityE时,将隐式创建该关系。看一下这些实体的头文件。您应该在EntityE中有这样一个属性(给定从E到D的一对一关系):

这意味着您必须通过其关系属性toD将EntityD“object”分配给newEntityE,如下所示:

// assuming EntityD has some property like NSString *name then
newEntityD.name = self.UILabel2.text;
newEntityE.toD = newEntityD;
看起来您试图直接分配NSString,而不是更新newEntityD的name属性,然后通过关系将newEntityD对象分配给newEntityE

@property (nonatomic, retain) EntityD *toD;
// assuming EntityD has some property like NSString *name then
newEntityD.name = self.UILabel2.text;
newEntityE.toD = newEntityD;