【问题标题】:CoreData inverse questionCoreData 反题
【发布时间】: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”,但没有任何区别

【问题讨论】:

    标签: objective-c cocoa core-data nsmanagedobject nsmanagedobjectcontext


    【解决方案1】:

    您的代码看起来有问题。您有一个方法addEmployee,但这种方法的通常命名约定是addEmployeesObject。它有一个尴尬的名称,因为您通常将这样的一对多关系的名称指定为“员工”。 Key-Value 编码知道如何更改属性名称的大小写,但不知道如何取消复数。

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

    我的第二个猜测是检查以确保在两个方向上都定义了逆。即Department应该有一个employees关系,它的逆应该指定为department。 Employee 应该有一个部门关系,并且它的逆应该被指定为雇员。我认为如果您在 XCode 中使用模型编辑器,如果您设置了一个,它会自动设置两个逆,但可能会无意中覆盖它,我想如果您在代码中定义您的数据模型,您可以做到。

    否则,您所做的似乎应该有效。

    【讨论】:

      【解决方案2】:

      检查您的 NSManagedObject 子类(代表 Core Data 模型中的类的类)是否与您的数据模型中的关系匹配。例如,如果您在生成/编码 Employee 和 Department NSManagedObject 子类之后向模型添加了关系,那么这些子类将过时并且不会反映您的模型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-04
        • 2011-06-07
        • 2012-10-26
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多