我对 CoreData 中逆关系的理解是这两个语句应该是等价的:
[department addEmployee:employee];
[employee setDepartment:department];
并且您只需要执行其中一项即可。
但是,如果我这样做:
[department addEmployee:employee];
NSLog(@"%@",[employee department]);
关系似乎没有正确更新。
但是这样做效果很好:
[employee setDepartment:department];
NSLog(@"%@",[employee department]);
我还尝试在 NSLog 之前的上下文中调用“processPendingChanges”,但没有什么区别
最佳答案
您的代码看起来有问题。您有一个方法 addEmployee
,但此类方法的通常命名约定是 addEmployeesObject
。它有一个尴尬的名称,因为您通常将这样的一对多关系的名称指定为“员工”。键值编码知道如何更改属性名称的大写,但不知道如何取消复数。
如果您调用 addEmployee 并且没有收到错误,则要么您以非常规的方式执行了某些操作,要么您可能正在调用一些恰好存在的不相关方法。如果是后者,它可以解释您的问题。
我的第二个猜测是检查以确保你的逆在两个方向上都被定义。即,Department 应该具有雇员关系,其逆关系应指定为部门。员工应具有部门关系,其逆关系应指定为员工。我认为如果您在 XCode 中使用模型编辑器,它会自动设置两个逆(如果您设置了一个),但可能会无意中覆盖它,并且我想如果您在代码中定义数据模型,您可以做到这一点。
否则看来你正在做的事情应该有效。
关于objective-c - CoreData逆向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7534989/