2010-11-22 11 views
0

私はあまりにも多くのコードで先にこの質問をしました。View Controllerで設定されたデリゲートは、サブビュー内では維持されません。

ViewControllerは、ViewController内のController >> View >> SubViewのUIViewチェーンを初期化します。

aSubView.delegate = self; 

NSLog(@"[email protected]",aSubview.delegate),はViewControllerを返しますので、私はそれが設定されている知っている:サブビューが初期化された後のViewControllerは、そのデリゲートとして設定されています。

サブビューでは、NSLog(@"[email protected]",self.delegate),は、このようなhr.lprojやファイルパスをランダムに返します。

デリゲートメソッドのいずれかを実装しようとするとクラッシュします。デリゲートはViewControllerにリンクせず、ランダム性を持つためです。

#import "TestDelegate.h" 

@interface TestSubView : UIView { 

id<TestDelegate> delegate; 
} 

@property (assign) id<TestDelegate> delegate; 

EDIT:

この

はSubView.hファイルがどのように見えるかであるのViewControllerのようなアプリデリゲートに初期化されます:

ViewController *controller = [[ViewController alloc] init]; 
[window addSubview:controller.view]; 
[controller release]; 

唯一の他の事は、私は、Appに追加しましたデリゲートはデフォルトでViewControllerヘッダーのインポートです

答えて

1

NSLogへの2回の呼び出しの間にビューコントローラーオブジェクトが解放/解放されている可能性はありますか?

+0

ビューコントローラがリリースされていれば、それはチェーンなので、他のものもそうだと思ってはいけません。サブビューは背景が赤色に設定されているからです。 –

+0

しかし、ビューもウィンドウによって保持されますビューコントローラは解放され、ビューは保持されます。ビューコントローラを明示的に保持していますか?どのようにインスタンス化していますか? – grahamparks

+0

初期化の方法に関する情報を追加しました。ありがとうございます。 –