2014-01-14 19 views
3

我研究吨的问题和文件约CoreData返回的故障,而不是实际值数据:CoreData故障 - 如何让

Relationship 'whiskers' fault on managed object (0xb7abab0) 

发生这种情况时,我试图获得的数量计数晶须,如:

self.numWhiskersLabel.text = [NSString stringWithFormat:@"%d", cat.whiskers.count]; 

即使我尝试登录直接设置我仍然得到一个错误的胡须:

NSLog(@"whiskers: %@", cat.whiskers); 

我明白,“核心数据不会返回完整的对象,直到需要访问该对象的实际值。 “这很好,但是这里需要访问实际值,我现在需要这个值!所以我怎么才能摆脱这个问题呢? oxymoron?如何访问Set的数量不被视为需要该值?

+0

所以你已经在Cat上完成了一个获取请求吗?然后,猫的物体应该在那里,准备好让你进入胡须。什么是胡须的数据类型? – DogCoffee

+0

什么数据类型是胡须?一组NSManagedObjects? – SomeGuy

+0

它在您的标签中显示了什么? - 您希望获取数据的电话应该可以正常工作。问题在于别处。 – Mundi

回答

0

这是一个错误条件。有些东西是错误的,或者它在您访问它之前被删除或者您尝试触摸它从

错误的线程。请编辑您的问题,并显示正在访问代码NSManagedObject

另外,如果在调试器中,您只是执行po cat,会发生什么情况?你看到完整的Cat对象还是给出错误错误?

+0

在这种情况下,NSManagedObject实例出错了。 – soleil

1

我没有得到我的意见,所以我只是要承担晶须任何反馈是一组NSManagedObjects

设定不会是最初加载,因为在内部它从DB另一个表来了。当您访问.whiskers.count它仍然不需要去获取数据,因为所有你想要的是集合中的胡须数量。

当你拉出来晶须集,然后将故障,尝试做

NSLog(@"whiskers: %@", [cat.whiskers.anyObject anyProperty]); 

这应该给你一个加载NSManagedObject。

+0

不,要获得关系中的对象的计数,它仍然必须触发关系中的对象的错误。它不必在这些对象的属性上触发错误。而cat.whiskers.count确实是获得关系中对象数量的好方法。出于多种原因,正确使用键值收集操作符,NSExpression或子查询都是更好的解决方案。 – quellish

+0

@quellish这正是我刚才所说的 - 当获得NSSet中的“数量”项目时,它将进入数据库并只选择晶须的对象ID,没有其他属性/列 – SomeGuy

+0

不,您的陈述“当你访问.whiskers.count它仍然不需要去获取数据“是误导。它仍然需要访问持久存储以满足计数表达式。即使它不是使作为关系目标的对象成为错误,它也必须错误*关系*。而错误的关系就是他有问题的地方。 – quellish