CoreData预取不会导致属性错误

时间:2011-12-03 00:08:12

标签: objective-c core-data nsmanagedobject nsmanagedobjectcontext

我遇到了CoreData无法解决对象故障的问题。我认为这是因为该对象已被删除,现在CoreData正试图在某些上下文中访问属性而无法将其置入。要解决此问题,我尝试调用setRelationshipKeyPathsForPrefetching并将其传递给我想要的关系已预取。

示例,我有一个实体A,并且它与实体B有多对多的关系,但在我访问实体B的属性时,实体B在另一个上下文中被删除,现在故障可以'得到满足。

[request setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects:@"listOfBs", nil]];

我认为如果我这样做,它会预取实体B,以便我可以安全地调用它的属性,但事实并非如此。

编辑:我似乎无法找到有关此问题的任何信息,但它必定是一个相当常见的问题。如果某个上下文具有在另一个上下文中删除的托管对象,它应该有一些方法可以安全地确定该对象不再存在而不仅仅是崩溃

编辑2:我认为CoreData没有正确地确认我的预取请求。如果我调用setRelationshipKeyPathsForPrefetching,那么即使在我没有错误的情况下,返回的对象也应该出现故障,我只需打印出返回的对象,看看它们是否有故障。 CoreData不能在多对多关系中预取对象吗?

编辑3:好吧也许这些关系本身是预取的,但是预取项目上的属性没有出错。所以如果我有实体A并且我想预取所有与A相关的B,我使用setRelationshipKeyPathsForPrefetching但是所有B的属性没有出现问题。

1 个答案:

答案 0 :(得分:0)

找出解决方案。 Core Data不允许从数据库中进行原子提取,因此如果在预取关系后出现问题,Core Data会抛出错误。预取关系就是这样,预取关系。但不是数据。解决方案是使用try / catch并在异常上刷新对象。