2012-05-07 6 views
0

OS Xの開発で新しくなった、私はデリゲートのコールバックを取得する際に問題を抱えていたので、メモリの問題であると思われる。私はNSViewControllerを持っています。それのinitメソッドでは、私はそうと、カスタムNSObjectのを設定しています:OS Xのデリゲートの使用

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

私は非アトミックとしてセットアップをしたデリゲート、割り当てます。ブレークポイントを見ると、私のView Controllerでコールバックが表示されるはずですが、これは決して起こりません。何か案は?

+0

デリゲートメッセージを送信する必要があるMyObjectのコードにブレークポイントを設定します。そのコードがヒットしたら、あなたがデリゲートメッセージに達するか、それを打つことがない理由を見るまで、行単位でステップします。もしそれに到達すれば、オブジェクトの 'delegate'プロパティを検査し、正しく設定されていれば、デリゲートメッセージとなるべきものに進み、何が起こるかを見ます。 –

答えて

2

__theManager = aManager;は、self.theManager = aManager;である必要があります。theManagerは保持されたプロパティです。あなたが持っている問題は、alloc] init];が+1の保持カウントをaManagerに与えることです。 __theManager = aManager;は、iVarが直接設定されるため、その数は増加しません。解放すると、保持カウントは0になり、割り当てが解除されます。

+0

ありがとう、私は残念ながらそれでも運がないことを試みた。私は再び私のブレークポイントをチェックして、私は[委任doSomething]を見ることができます。コールされています。 –

+1

@MarioPenだから、デリゲート**が呼び出されると、何が問題なのですか? – trojanfoe

+0

それは問題ではありません。 –