2011-04-05 490 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