CoreData -关系的一方总是nil



我有一个CoreData项目,其中有两个相关的实体(Users和Studies),这些实体与另一个实体(UserStudy)有一对多的关系,该实体与前两个实体中的每一个都有一对一的关系,以及一些额外的属性。

我正在经历一个非常奇怪的问题。我可以将UserStudy添加到Users和Studies的集合中,但是关系的另一边永远不起作用。每次我设置它,我都没有得到错误,关系就是null。

  1. 我已经使用相同的代码创建了一个测试项目,由于某种原因,它在那里工作,但不是在我一年的项目(大型代码库,我不能简单地垃圾)
  2. 我已经清理了
  3. 我已经删除了导出数据
  4. 我已经尝试使用点访问器,方便设置器和使用setValue:ForKey来设置关系。
  5. 我已经验证了所有反向关系都正确设置。
  6. 我已经验证了在User和Study端是一对多的关系,在UserStudy端是一对一的关系。

我尝试设置关系的代码如下:

CRMUser *aUser = [NSEntityDescription insertNewObjectForEntityForName:@"CRMUser"
                                               inManagedObjectContext:self.ctx];
CRMStudy *aStudy = [NSEntityDescription insertNewObjectForEntityForName:@"CRMStudy"
                                                 inManagedObjectContext:self.ctx];
CRMUserStudy *aUserStudy = [NSEntityDescription insertNewObjectForEntityForName:@"CRMUserStudy"
                                                         inManagedObjectContext:self.ctx];
aUserStudy.study = aStudy;
aUserStudy.user = aUser;
STAssertTrue([aUserStudy.user isEqual:aUser], @"newUserStudyWithUser:study:token failed to set user");
STAssertTrue([aUserStudy.study isEqual:aStudy], @"newUserStudyWithUser:study:token failed to set study");
NSLog(@"aUserStudy: %@",aUserStudy);

总是失败,并给我这个日志:

aUserStudy: <CRMUserStudy: 0xa6db8e0> (entity: CRMUserStudy; id: 0xa6dc580 <x-coredata:///CRMUserStudy/t1BDB3E8A-F5F0-4462-AB88-C5186AC4D8C671> ; data: {
    study = nil;
    token = nil;
    user = nil;
})

但是如果我这样做了:

CRMUser *aUser = [NSEntityDescription insertNewObjectForEntityForName:@"CRMUser"
                                               inManagedObjectContext:self.ctx];
CRMStudy *aStudy = [NSEntityDescription insertNewObjectForEntityForName:@"CRMStudy"
                                                 inManagedObjectContext:self.ctx];
CRMUserStudy *aUserStudy = [NSEntityDescription insertNewObjectForEntityForName:@"CRMUserStudy"
                                                         inManagedObjectContext:self.ctx];
[aUser addUserStudyObject:aUserStudy];
[aStudy addUserStudyObject:aUserStudy];

关系已设置,但另一端仍然为nil。

就像我说的,我可以复制粘贴我的模型代码到一个新的项目,一切都很好。有人经历过吗?也许这和测试目标有关?

我仍然不知道这个问题的具体原因是什么,我假设我的.xcdatamodeld文件不知怎么地损坏了。

我已经尝试过删除UserStudy实体,并重新创建它,但没有成功。

然后我创建了一个新的模型版本。
我没有把这个新版本设置为当前的默认值。这不能解决问题。

然后我再次删除并重新创建UserStudy实体。
突然一切都开始工作了。

所以我假设创建新的模型版本导致XCode重新生成我的模型文件,并修复导致问题的任何腐败。请注意,我在旧模型文件与新模型文件上运行了一个差异,似乎没有什么不同,所以我不知道实际问题是什么,除了模型一定已经以某种方式损坏了。

最新更新