我有两种模式:
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
似乎公司抱怨用户对象无效。但是,如果我没有设置关系并单独在用户和公司上运行validateForInsert
,那么他们就会成功通过。
我也曾尝试在双方建立关系,但无济于事。我已将删除规则设置为"无操作"。
我的数据模型设置为公司是用户的可选关系,反之亦然。无法弄清楚为什么这不会过去......
答案 0 :(得分:2)
好的,看起来这里的问题与使用不同的上下文有关。在此之前,我为两个在上下文中创建所述对象的对象设置了Factory类,但非常愚蠢的是,我忘了初始化有问题的上下文。由于它是一项测试,我决定使用MR_createEntity
而不是MR_createEntityInContext...
方法,这样就可以解决问题了。
关于这一点的两件事:
由于两个对象都没有附加到上下文(或者更可能 - 我不完全理解是什么),因此validateForInsert没有通过,这仍然很奇怪正好在这里进行。)
Xcode错误报告一如既往地</sarcasm>