我的数据模型如下所示:
对象A< ----->>对象B< ----->对象C
我通过NSFetchedResultsController从Core Data中获取一组Object A.对于该组中的一个特定对象,我知道它只有一个与之相关的对象B,我想要检索对象C.
我正试图这样做:
NSArray *bArray = [objectA.relationA allObjects];
ObjectB *myB = bArray[0];
ObjectC *myC = myB.relationB;
(I've also tried [myB valueForKey:@"relationB"] with the same result)
问题是我无法解决对象C的错误 - 我一直为myC得到这个:
$ 6 = 0x0a947c00(entity:ObjectC; id:0xa9680b0; data :)
我将此值传递给另一个视图控制器,当它在那里访问时仍然是一个错误,这不是非常有用。
当我拥有该对象时,必须重新获取似乎很愚蠢,但我不知道还能做什么。我能找到的所有线程都说故障是正常的,当你访问故障对象时它们会被触发,但这似乎不会发生在这里。
有什么建议吗?
更新:我尝试添加此内容:
[fetchRequest setRelationshipKeyPathsForPrefetching:@[@"relationA.relationB"]];
但它没有任何区别。
答案 0 :(得分:0)
问题是我无法解决对象C - I的错误 继续为myC得到这个:
$ 6 = 0x0a947c00(entity:ObjectC; id:0xa9680b0; data :)
您还没有尝试访问myC
。在你以某种方式使用它之前,myC
仍将是一个错误。来自the docs:
故障处理是透明的 - 您不必执行提取 实现了一个错误。如果在某个阶段出现故障的持久性 访问对象,然后Core Data自动检索数据 对象并初始化对象(请参阅NSManagedObject类 引用不会导致错误的方法列表)。 这个过程通常被称为触发故障。
所以,(假设ObjectC
具有name
属性),如果您执行以下操作:
NSString *name = myC.name;
你应该发现myC
的错误发生了,你自动拥有了一个可以使用的真实对象。
我能找到的所有线程都说错误是正常的 当你访问故障对象时它们会被触发,但那样 似乎没有发生在这里。
他们是对的。除非您还没有告诉我们,否则听起来您只是期望在不同时间触发故障,即当您将对象分配给myC
时。但同样,这个错误不会发生,直到你对错误采取行动,比如获取或设置一个财产。