2010-12-20 11 views
7

ナビゲーションベースのビューコントローラがあり、ビューコントローラでは上のナビゲーションバーが表示されず、カスタムUIViewがナビゲーションバーとして使用されています。UIViewController&UIview deallocが呼び出されない

UIViewバーには戻るボタンがあり、バックボタンが事前設定されている場合、View Controllerと通信するためにDelegateメソッド(プロトコルを宣言しています)を使用します。

私はCustomNavigation Barで代理人を使用します。 id delegate;

とメインビューコントローラで私は私がViewControllersののdeallocでこのバーを解放デリゲートに

topBar = [[TopNavigationBar alloc] initWithFrame:CGRectMake(0, 0, 480, 40)]; 
topBar.lblTitle.text = @"Shop"; 
topBar.delegate = self; 

を設定するナビゲーションバーを割り当てます。

私が戻るボタンを押すと、デリゲートメソッドを使用してメインViewControllerのpopViewControllerを呼び出します。

//in Custom Bar 
-(void)ButtonPressed { 
    [delegate TopNavigationBarBackButtonPressed]; 
} 

//In View COntroller 
-(void)TopNavigationBarBackButtonPressed { 

    [self.navigationController popViewControllerAnimated:YES]; 
} 

は今のViewControllerがポップされ、制御が以前のViewControllerに行くがにdeallocが、私は間違って何をやっているのViewControllerとUIViewの

両方で焼成されていませんか?

+0

任意のアイデアの人でなければなりません? retainCountが0でなければ、deallocは呼び出されません。しかし、私はどこでもviewControllerを保持していません。私はスタック上でそれを押した後、[vewController release]を行います。だから私が考えることができる唯一の理由は、私が書いたカスタムプロトコルです。私はそれを解放する必要がありますか?私は財産の代議員を保持します。しかし、私がdeallocでそれをリリースしても、それは呼び出されていません。止まった! –

答えて

16

OK!最後に問題の内容を理解しました。

はい、デリゲートでした。だから私の "戻るボタンを押した"メソッドでは、私はデリゲートをNILに設定する必要があります。

そして、すべてのdeallocが呼び出されます。あなたはカスタムプロトコルを気にします。私の人生の2日間は私は戻ってくることはありません。

EDIT: OKデリゲートをnilに設定する必要はありません。

プロパティで私は代理人を保持していたので、私はすべての問題を抱えていました。

@property(nonatomic, retain)id <ASNavigationDelegate>delegate; 

これは

@property(assign)id <ASNavigationDelegate> delegate; 
+1

私はこれのためにリリースされていないビューをたくさん持っていました。 – Slee

+0

retain/releaseをオーバーライドしてコールスタックを調べることも、これらの状況に役立ちます。 – markshiz

関連する問題