0

我的数据模型如下所示:

对象 A <----->> 对象 B <-----> 对象 C

我通过 NSFetchedResultsController 从核心数据中获取一组对象 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(实体:ObjectC;id:0xa9680b0;数据:)

我将这个值传递给另一个视图控制器,当它在那里访问时仍然是一个错误,这并不是非常有用。

当我有对象时必须重新获取似乎很愚蠢,但我不知道还能做什么。我可以找到的所有线程都说故障是正常的,并且当您访问故障对象时它们将被触发,但这似乎并没有发生在这里。

有什么建议么?

更新:我尝试添加这个:

[fetchRequest setRelationshipKeyPathsForPrefetching:@[@"relationA.relationB"]];

但这没有任何区别。

4

1 回答 1

0

问题是我无法为对象 C 触发错误 - 我一直为 myC 得到这个:

$6 = 0x0a947c00(实体:ObjectC;id:0xa9680b0;数据:)

您尚未尝试访问myCmyC在您以某种方式使用它之前,它将一直是一个错误。从文档

故障处理是透明的——您不必执行获取来实现故障。如果在某个阶段访问了故障对象的持久属性,那么 Core Data 会自动检索该对象的数据并初始化该对象(请参阅 NSManagedObject 类参考以获取不会导致故障触发的方法列表)。这个过程通常被称为触发故障。

因此,(假设ObjectC有一个name属性)如果您执行以下操作:

NSString *name = myC.name;

你应该发现myC火灾的故障,你会自动有一个真实的对象可以使用。

我可以找到的所有线程都说故障是正常的,并且当您访问故障对象时它们将被触发,但这似乎并没有发生在这里。

他们是对的。除非您还没有告诉我们更多内容,否则听起来您只是希望故障在不同的时间触发,即当您将对象分配给myC. 但同样,除非您对故障采取措施,例如获取或设置属性,否则故障不会触发。

于 2013-09-03T04:32:07.407 回答