2011-02-26 14 views
1

私はランダムに選択した画像を表示するアプリケーションで作業しています。接触すると変更されます。 と私はメニューとして機能するviewDidAppearからモーダルビューを提示しています。viewDidAppearが繰り返し呼び出されます

新しい画像がメインビューに読み込まれるたびに、 viewDidAppearが繰り返し呼び出されるため、メニューモーダルビューがポップアップし続けるようになります。 私はpresentModalViewをviewDidAppearに入れているのは、モーダルビューがメインビューの前に来る必要があり、メインビューのタッチトリガーではないからです。 私は他の場所でモーダルビューを提示しようとしましたが、実際には機能しませんでした。

どのような提案ですか?次

は、メインビューに私のviewDidAppearである が、これから多くの情報がありません...

-(void)viewDidAppear:(BOOL)animated 
{ 
NSLog(@"viewDidAppear"); 
[self presentModalViewController:modalView animated:YES]; 
} 

私のアプリは、絶えずタッチするたびにランダムな画像を再読み込みします。

+0

あなたの投稿を投稿してください.DidAppearメソッド – Max

+0

すべての-viewDidAppear呼び出しが、同じオブジェクトまたは複数のインスタンスのオブジェクトで呼び出されていますか? –

答えて

1

プロパティがfalseの場合は、お使いのviewDidAppear方法のチェックで確認するために...あなたのUIViewのサブクラスへのプロパティは、あなたのinitメソッドにfalseに初期化される

@interface RandomImageView : UIView { 
    BOOL hasPresentedModalMenuView 
} 

@property(assign) BOOL hasPresentedModalMenuView; 

を追加します。表示されている場合は、ビューを表示し、プロパティをTRUEに設定します。

- (void)viewDidAppear { 
    if (!self.hasPresentedModalMenuView) { 
     // Present view..... 
     ..... 
     self.hasPresentedModalMenuView = TRUE; 
    } 
} 

これは、モーダルメニュービューが複数回表示されないようにします。

+5

これは何らかのハッキングです。複数のviewDidAppear呼び出しを得る本当の理由を発見する必要があります。そして、プロパティを追加する必要はありません(さらには間違っている)。これは、クラス内でのみ使用され、公開されてはならない内部のivarです。 – Max

+0

コードを抜かずに本当の理由を発見するのは難しいです。 プロパティの使用については、原則として同意します。しかし、それは一般的な慣習ではないようです。多くの開発者は、内部フィールド用のプロパティを使用して、すべてのクラスメンバー間で呼び出しセマンティクスを維持し、ファンキーなメモリ管理バグのリスクを低減しているようです。 – mmccomb

+0

プロパティはパブリックメンバーのみに追加する必要があります。 hasPresentedModalMenuViewの場合はブール値です。どのようなメモリバグが発生する可能性がありますか? – Max

2

viewDidあなたのアプリが起動するとAppearが呼び出されます。次にモーダルビューを表示すると、ビューが消えます。モーダルビューがなくなると、ビューが再び表示され、viewDidAppearが再び呼び出されます。泡立ち、すすぎ、繰り返します。

オブジェクトにフラグを設定して、その後のviewDidAppear呼び出しを無視できるように思えます。

+0

お返事ありがとうございます。私はどのようにフラグを設定できますか? – CosmicRabbitMediaInc

+0

"あなたのアプリの起動時にviewDidAppearが呼び出されました"という記述はあまり正確ではありません。 viewDidAppearは、そのビューコントローラのビューがウィンドウに追加されたときにビューコントローラで呼び出されます。 UIViewControllerのドキュメントをチェックしてください。 – occulus

+0

@occulus:私は実際にはCosmicRabbitMediaIncの質問に答えるのではなく、アプリケーションの開始からviewDidAppearが呼び出されて終了する一連のイベントの正確な詳細に入るのが良いと感じました。 – Anomie

関連する問題