我遇到了CoreData无法解决对象故障的问题。我认为这是因为该对象已被删除,现在CoreData正试图在某些上下文中访问属性而无法将其置入。要解决此问题,我尝试调用setRelationshipKeyPathsForPrefetching
并将其传递给我想要的关系已预取。
示例,我有一个实体A,并且它与实体B有多对多的关系,但在我访问实体B的属性时,实体B在另一个上下文中被删除,现在故障可以'得到满足。
[request setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects:@"listOfBs", nil]];
我认为如果我这样做,它会预取实体B,以便我可以安全地调用它的属性,但事实并非如此。
编辑:我似乎无法找到有关此问题的任何信息,但它必定是一个相当常见的问题。如果某个上下文具有在另一个上下文中删除的托管对象,它应该有一些方法可以安全地确定该对象不再存在而不仅仅是崩溃编辑2:我认为CoreData没有正确地确认我的预取请求。如果我调用setRelationshipKeyPathsForPrefetching,那么即使在我没有错误的情况下,返回的对象也应该出现故障,我只需打印出返回的对象,看看它们是否有故障。 CoreData不能在多对多关系中预取对象吗?
编辑3:好吧也许这些关系本身是预取的,但是预取项目上的属性没有出错。所以如果我有实体A并且我想预取所有与A相关的B,我使用setRelationshipKeyPathsForPrefetching但是所有B的属性没有出现问题。
答案 0 :(得分:0)
找出解决方案。 Core Data不允许从数据库中进行原子提取,因此如果在预取关系后出现问题,Core Data会抛出错误。预取关系就是这样,预取关系。但不是数据。解决方案是使用try / catch并在异常上刷新对象。