CoreData 反题
Posted
技术标签:
【中文标题】CoreData 反题【英文标题】:CoreData inverse question 【发布时间】:2011-09-23 21:20:45 【问题描述】:我对CoreData中反比关系的理解是这两个语句应该是等价的:
[department addEmployee:employee];
[employee setDepartment:department];
而且你只需要做其中之一。
但是,如果我这样做:
[department addEmployee:employee];
NSLog(@"%@",[employee department]);
关系似乎没有正确更新。
但是,这样做可以正常工作:
[employee setDepartment:department];
NSLog(@"%@",[employee department]);
我也尝试在 NSLog 之前的上下文中调用“processPendingChanges”,但没有任何区别
【问题讨论】:
【参考方案1】:您的代码看起来有问题。您有一个方法addEmployee
,但这种方法的通常命名约定是addEmployeesObject
。它有一个尴尬的名称,因为您通常将这样的一对多关系的名称指定为“员工”。 Key-Value 编码知道如何更改属性名称的大小写,但不知道如何取消复数。
如果您正在调用 addEmployee 并且没有收到错误,则可能是您以非常规的方式执行了某些操作,或者您可能正在调用碰巧存在的一些不相关的方法。如果是后者,它可以解释你的问题。
我的第二个猜测是检查以确保在两个方向上都定义了逆。即Department应该有一个employees关系,它的逆应该指定为department。 Employee 应该有一个部门关系,并且它的逆应该被指定为雇员。我认为如果您在 XCode 中使用模型编辑器,如果您设置了一个,它会自动设置两个逆,但可能会无意中覆盖它,我想如果您在代码中定义您的数据模型,您可以做到。
否则,您所做的似乎应该有效。
【讨论】:
【参考方案2】:检查您的 NSManagedObject 子类(代表 Core Data 模型中的类的类)是否与您的数据模型中的关系匹配。例如,如果您在生成/编码 Employee 和 Department NSManagedObject 子类之后向模型添加了关系,那么这些子类将过时并且不会反映您的模型。
【讨论】:
以上是关于CoreData 反题的主要内容,如果未能解决你的问题,请参考以下文章
CoreData与CloudKit同步时将图像保存到CoreData?