我有以下数据模型:
entityA<-->>entityB<<-->>entityC
entityD<-->>entityE
请注意,entityD和entityE与A-C没有关系 .
我的DetailViewController从托管对象获取属性,并作为新的托管对象保存到managedObjectContext .
我目前在UILabels中显示现有的托管对象,如下所示:
UILabel1.text = [self.selectedEntityB nameB];
UILabel2.text = [self.selectedEntityA nameA];
然后我在这里保存到保存操作中的上下文:
- (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',原因:' - [__ NSCFString managedObjectContext]:无法识别的选择器发送到实例0x10939fd00'
如何在新创建的对象之间 Build 关系?
2 回答
通过关系“property”将EntityD分配给EntityE时,将隐式创建关系 . 查看每个实体的头文件 . 您应该在EntityE中拥有这样的属性(给定从E到D的一对一关系):
这意味着您必须通过它的关系属性toD将一个EntityD'对象'分配给newEntityE,如下所示:
看起来您正在尝试直接分配NSString而不是更新newEntityD的name属性,然后通过关系将newEntityD对象分配给newEntityE .
我假设您正在使用
NSManagedObject
子类 . 在这种情况下,我建议远离繁琐的setValue
调用,而是使用方便的点符号 .与
toD
的关系指向EntityD
对象,因此它不能是文本字段中的字符串 . 改为设置entityD: