2012-05-07 58 views
0

我是新的OS X開發,我一直有一個問題得到一個委託回調,我懷疑它可能是一個內存問題。我有一個NSViewController。在它的init()方法,我設置自定義NSObject的像這樣:使用代表在OS X

 MyObject *aManager = [[MyObject alloc] initManager]; 
    __theManager = aManager; 
    self.theManager.delegate = self; 
    [aManager release]; 

委託我設置的非原子,分配。看着斷點,我應該看到我的視圖控制器中的回調,但這從來沒有發生。有任何想法嗎?

+0

在應該發送委託消息的MyObject中的代碼上設置一個斷點。如果該代碼被擊中,則逐行逐行,直到您到達委託消息或查看爲什麼不擊中它。如果確實需要,請檢查對象的「委託」屬性,如果設置正確,請進入應該是委託消息的內容並查看會發生什麼。 –

回答

2

__theManager = aManager;應該是self.theManager = aManager;,假設theManager是保留財產。您遇到的問題是alloc] init];給予aManager保留計數爲+1。由於iVar是直接設置的,因此__theManager = aManager;不會增加該數量。當你釋放它時,保留計數變爲0,所以它被釋放。

+0

謝謝,我試過,不幸的是仍然沒有運氣。我再次檢查了我的斷點,我可以看到[delegate doSomething];被召喚。 –

+1

@MarioPen所以如果委託**正在被調用,那麼問題是什麼? – trojanfoe

+0

這不是問題所在。 –