2011-04-05 277 views
0

Hia的,核心数据关系类型问题

假设我有一个到一个或一个至5的关系。 可以说Foo类对管理类Bar有一对一的引用。

Foo.h 
Bar * bar; 
@property (nonatomic, retain) Bar * bar; 
Foo.m 
@syntesize bar; 

我将访问美孚这样:

Foo * myFoo= [fetched result what ever]; 

使用myFoo.bar.whatEverPoperty工作,但像酒吧* myBar节省myFoo.bar不是。

任何想法为什么?

编辑:

SomeClass.h 
Bar * myBarRef; 
@property (nonatomic, retain) Bar * myBarRef; 
SomeClass.m 
@synthesize myBarRef; 

现在我创建该类的一个对象:

SomeClass * mySomeClass= [[SomeClass Alloc]init]; 

并存储在那里的参考: mySomeClass.myBarRef = myFoo.bar; (EXC_BAD_ACCESS)

偶尔他强调这一行,而不是上面:

@synthesize myBarRef; (EXC_BAD_ACCESS) 

可能的问题是懒加载?如果是的话,如何强制加载foo?

+0

我不完全相信你正在试图做的是不工作的。你能不能解释一下? – paulbailey 2011-04-05 11:40:20

+0

“不工作“以什么方式? – 2011-04-05 11:40:55

+0

如果通过'延迟加载'引用核心数据错误机制,否则对客户端来说是透明的。访问关系时加载对象是自动完成的。 – 2011-04-07 09:32:00

回答

1

EXC_BAD_ACCESS表示您正在访问未初始化的内存;可能是一个释放的对象

如果崩溃发生在行mySomeClass.myBarRef = myFoo.bar;或者mySomeClassmyFoo未初始化或释放。您需要重新阅读memory management rules

如果仍然无法找到该错误,请使用调试器。它会告诉你在哪个方法中发生了错误的访问。

你可以(而且应该这样做)也switch on zombie support(环境变量NSZombieEnabled设置为YES

+0

通常情况下,我会同意你的说法,但是,我证实了每个对象的存在,mySomeClass在那里,myFoo也是如此,我可以设置并获取每个对象mySomeClass的rty,增加其保留计数,但我不能在那里存储myFoo.bar。我可以创建Bar * localBar并将其存储在那里,可以访问它的每个属性并可以手动增加保留计数。就像我说的那样,物体在那里。 – 2011-04-05 12:28:28

+0

当然有。没有僵尸。 – 2011-04-05 12:48:03

+0

您是否尝试过在'objc_exception_throw'上设置断点?您可以从XCode执行此操作:运行 - >管理断点 - >停止Objective-C异常。当您在启用该选项的调试器中运行应用程序时,您将能够准确查明导致崩溃的代码行。 – octy 2011-04-05 14:07:39