2016-12-02 12 views
2

マップに基づいて動作するアプリケーションを開発しています。一度ユーザーがMapViewControllerを開くと、5秒ごとにデータが読み込まれます。tabbarcontrollerのようなviewdidloadメソッドを呼び出さないようにする方法はありますか?

私はナビゲーションコントローラ(プッシュビューコントローラ)を使用しています。

だから毎回MapViewControllerviewdidloadメソッド呼び出しに行くとき。私はそれが好きではありません。

だから私はtabbarcontrollerのようなviewdidloadメソッドを避けようとしています。

これを達成する方法はありますか?

+0

を試してみてくださいナビゲーションコントローラ(プッシュ・ビュー・コントローラ) –

答えて

0

この

-(void)clickForPush{ 
    // declarre viewcontroller e.g 'saveRecipeVC' instance globally in interface 
    if (!saveRecipeVC) { 
     saveRecipeVC = [self.storyboard instantiateViewControllerWithIdentifier:SaveRecipeVCID]; 
    } 
    [self.navigationController pushViewController:saveRecipeVC animated:YES]; 
} 
+0

うわー、魅力的なように働く。正解として受け入れます。ありがとう – Himanth

+0

ようこそ@himanth – KKRocks

2

viewDidLoadあなたのMapViewControllerがナビゲーションコントローラの上部から飛び出したときに割り当て解除されているためです。ビューコントローラを再作成すると、それが再び割り当てられ、ビューが再び読み込まれます。あなたのナビゲーションコントローラを含むクラスのMapViewControllerへの参照を保持している場合、ARCはオブジェクトの割り当てを解除しません。そして、この参照をスタックに戻してviewDidLoadが再び呼び出されることはありません。

編集:参照用のコードの追加:

MapViewContoller *mapViewController; // declared globally so there's a strong reference. 

- (void) openMapViewController { 
    if (!mapViewController) { 
     mapViewController = [self.storyboard instantiateViewControllerWithIdentifier: MapViewControllerID]; 
    } 
    [self.navigationController pushViewController: mapViewController, animated: YES]; 
} 
+0

のコードは、あなたがそれを行う方法をより多くの情報を与えてくださいすることができ置きます。ありがとう – Himanth

+0

確かに、@himanth。私はあなたが既に別の答えを受け入れていることを知っていますが、あなたの質問に関連し、Obj-Cのために適切に強調表示されたコードを追加しました。そして、この質問を将来突き詰めて、エラーが発生します。 –

+0

ありがとう@kgaleman – Himanth

0

のviewDidLoadの場合、可能または効率的ではないXIBにおけるインターフェースの100%を構成するために使用することが意図されています。ビューに設定する特定のプロパティをXIBで使用できないことがあります。場合によっては、自動レイアウトを使用して、そのためのエディタが実際に自動レイアウトコードを作成するよりも悪いことに気づきます。場合によっては、ボタンの背景として設定する前に画像を変更する必要があります。

これらのことをしたくない場合は、viewDidLoadを空にします。避けるより。または

viewDidLoadに条件付きコードを追加します。

(void)viewDidLoad { 
    [super viewDidLoad]; 

    if(condition) { 
    // put your code here  
    } 

    } 
関連する問題