当我设置两个有效对象之间的关系时,validateForInsert 失败

Posted

技术标签:

【中文标题】当我设置两个有效对象之间的关系时,validateForInsert 失败【英文标题】:validateForInsert fails when I set relationship between two valid objects 【发布时间】:2014-09-27 19:01:17 【问题描述】:

我有两个模型:

User
Company

用户有两个属性:

firstName
lastName

公司有一个属性:

name

用户和公司之间存在一对多(即一个用户可以拥有多个公司)。

我可以在我的应用程序中很好地创建两个对象之间的这种关系。但是,当我设置如下相同的关系时,我有一个单元测试失败:

User *user = [UserFactory regularUserInContext:self.context];
Company *comp = [CompanyFactory regularCompanyInContext:self.context];
comp.owner = user;
NSError *error;
XCTAssertTrue([comp validateForInsert:&error], @"Company should save when all properties are set correctly");

有问题的工厂方法只是设置了用户和公司的基本属性——我可以确认这些设置正确。但是,由于以下错误,验证步骤失败:

Dangling reference to an invalid object

公司似乎在抱怨用户对象无效。但是,如果我设置关系并分别对 User 和 Company 运行 validateForInsert,那么它们会成功通过。

我也尝试过设置双方的关系,但无济于事。我已将两者的删除规则都设置为“无操作”。

我的数据模型设置为公司是用户的可选关系,反之亦然。不知道为什么这没有通过......

【问题讨论】:

您是否已将公司添加到用户 companySet 中? @NikitaTook 我没有 - 你也不应该这样做。 【参考方案1】:

好吧,看来这里的问题与使用不同的上下文有关。在此之前,我为在上下文中创建所述对象的两个对象都有工厂类,但是非常愚蠢的是,我忘记了初始化相关上下文。由于这是一个测试,我决定使用MR_createEntity 而不是MR_createEntityInContext... 方法,这样就搞定了。

关于这个的两件事:

    由于两个对象都没有附加到上下文(或者可能 - 更有可能 - 我不完全理解这里到底发生了什么)而导致 validateForInsert 没有通过,这仍然很奇怪。

    Xcode 报错一如既往</sarcasm>

【讨论】:

以上是关于当我设置两个有效对象之间的关系时,validateForInsert 失败的主要内容,如果未能解决你的问题,请参考以下文章

JPA 孤儿删除不适用于 OneToOne 关系

PHP Trait 解决 PHP 单继承问题

如何使用 PHPMyAdmin 在两个表之间创建关系?

如何获得两个日期对象之间的小时差? [复制]

C ++从两个类中确定void *的类型

类与类之间的关系