1

我的CoreData的反比关系的理解是,这两个语句应该是等价的:CoreData逆问题

[department addEmployee:employee]; 
[employee setDepartment:department]; 

而且你只需要做其中之一。

但是,如果我这样做:

[department addEmployee:employee]; 
NSLog(@"%@",[employee department]); 

它不会出现在的关系进行了正确更新。

做这不过这样一来,工作正常:

[employee setDepartment:department]; 
NSLog(@"%@",[employee department]); 

我也打过电话“processPendingChanges”上的NSLog前的背景,但它不会有所作为

回答

1

东西看起来错关于你的代码。您有一个方法addEmployee,但通常这种方法的命名约定是addEmployeesObject。它有一个尴尬的名字,因为你通常指定一个像“employees”这样的多对多关系的名字。键值编码知道如何更改您的属性名称的大小写,但它不知道如何将其放大。

如果您正在调用addEmployee并且没有收到错误,您可能以非常规方式完成了某项操作,或者您可能正在调用一些恰好存在的不相关的方法。如果是后者,它可以解释你的问题。

我的第二个猜测是检查以确保你的逆是在两个方向上定义的。也就是说,部门应该有一个雇员关系,而其反面应该被指定为部门。员工应该有部门关系,而其反向应该被指定为员工。我认为如果你在XCode中使用模型编辑器,它会自动设置两个逆向,如果你设置了一个逆向,但它可能会无意中覆盖它,我想如果你在代码中定义你的数据模型,你可以做到这一点。

否则,你似乎在做什么应该工作。

1

检查您的NSManagedObject子类(表示您的核心数据模型中的类的类),以确定这些关系与您的数据模型中的关系相匹配。例如,如果在已经为Employee和Department NSManagedObject子类生成/编码后向模型添加了关系,那么这些子类将会过时并且不会反映您的模型。