核心数据关系错误
Posted
技术标签:
【中文标题】核心数据关系错误【英文标题】:Core Data relationship error 【发布时间】:2012-08-02 19:01:14 【问题描述】:我想保存一个 Goal 和一个 Actor。这两个实体具有责任关系:
Goal *addgoal = (Goal*)[NSEntityDescription insertNewObjectForEntityForName:@"Goal" inManagedObjectContext:context];
addgoal.goalNaam = nameTextField.text;
addgoal.goalId = idField.text;
addgoal.goalBeschrijving = beschrijvingField.text;
Actor *addactor = (Actor*)[NSEntityDescription insertNewObjectForEntityForName:@"Actor" inManagedObjectContext:context];
addactor.actorNaam = responsibleField.text;
[addgoal addResponsibilityObject:addactor];
上面的行 ([addgoal addResponsibility:addactor]) 导致错误,有什么问题?
在Goal.h中:
@interface Goal (CoreDataGeneratedAccessors)
- (void)addResponsibilityObject:(Actor *)value;
@end
错误:
2012-08-02 20:57:11.838 Choose3[7434:fb03] -[__NSCFSet entity]:无法识别的选择器发送到实例 0x8877810 2012-08-02 20:57:11.840 Choose3[7434:fb03] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFSet 实体]:无法识别的选择器发送到实例 0x8877810”
【问题讨论】:
您尝试调用名为entity
的方法,但您在错误类型的对象上调用它。
没有方法“实体”。是否需要实现'- (void)addResponsibilityObject:(Actor *)value;' ?
你需要给我们- (void)addResponsibilityObject:(Actor *)value;
的实现
其实有一个方法entity
;它存在于与核心数据相关的许多不同类中。错误消息声称 entity
在 NSSet 上被调用,这不是拥有它的类之一。 “责任”是不是一种太多的关系……好像 Core Data 对此感到困惑?
@JeffWolski,我没有实现这个方法,有必要吗?现在我尝试了 '[[addgoal mutableSetValueForKey:@"responsibility"] addObject:addactor]; ' 而是仍然得到同样的错误。
【参考方案1】:
我刚刚遇到了同样的问题。这里的解决方案是,我忘记检查模型检查器中关系选项中的“To-Many”选项。
【讨论】:
【参考方案2】:Core Data 似乎对责任关系的性质感到困惑。我建议创建与您的数据模型的当前状态相匹配的NSManagedObject
子类。
创建此错误的一种方法是将一对多关系更改为一对一关系,而无需重新生成实体类文件。
【讨论】:
我重新生成了我的类文件,但仍然出现此错误(所有关系都与我的模型中的多关系。奇怪的是:NSString *naamActor = [goal valueForKeyPath:@"responsibility.actorNaam"]; NSLog(@"Naam actor will appear: %@", naamActor); responsibleField.text = [goal valueForKeyPath:@"responsibility.actorNaam"];
NSLog 有效(他给了我 naamActor)但 naamActor 无法在文本字段中显示..以上是关于核心数据关系错误的主要内容,如果未能解决你的问题,请参考以下文章
核心数据 - 如何在不触发错误的情况下检查对象关系是不是存在