objective-c - CoreData逆向问题

标签 objective-c cocoa core-data nsmanagedobject nsmanagedobjectcontext

我对 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/

相关文章:

objective-c - 为什么 Objective-C 没有命名空间?

objective-c - NSLayoutConstraint 阻止 NSWindow 调整大小

iphone - 如何识别核心数据管理对象模型——哈希?

IOS CoreData - 无法加载 NSPersistentStoreCoordinator

ios - cocoa-touch中initWithCoder方法中的aDecoder有什么作用?

ios - 不了解 NavigationController 和 UIViewControllers 在 iOS 中的工作方式

macos - NSImageView 更改事件处理程序

ios - dispatch_group_notify 在所有任务完成之前被调用

ios - 如何删除已在 Xcode Storyboard中设置的约束

objective-c - 在 objective-c 中触摸一个文件