核心数据关系错误

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 无法在文本字段中显示..

以上是关于核心数据关系错误的主要内容,如果未能解决你的问题,请参考以下文章

核心数据关系在删除后导致保存错误

访问核心数据中的子对象时出现关系错误

核心数据谓词根据关系获取数据,错误为无法解析格式字符串

核心数据 - 如何在不触发错误的情况下检查对象关系是不是存在

核心数据 - 在不触发错误的情况下获取对多关系的 objectID

核心数据在获取时是不是返回对象AsFaults = NO 也有错误关系?