6

UINavigatorController を使用してアプリを開発しています。2 番目にプッシュされた viewController でメソッド viewDidAppear を使用して、外部サーバーの情報を検索しています。

良い。iOS5 では最初は問題なく動作していましたが、iOS4.3 では viewDidAppear が呼び出されていないことに気付いたので、次のコードをルートに配置しました。

- (void)navigationController:(UINavigationController *)navigationController 
       didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{
    [viewController viewDidAppear:animated];
}

その後、iOS4.3でアプリが正常に動作するようになりました。ただし、iOS5ではviewDidAppearを2回呼び出しているため、そうではありませんでした(最初に呼び出されたものとからのものnavigationController:didShowViewController:animated:

viewDidAppearを1回だけ呼び出すにはどうすればよいですか?

どうもありがとうございました

4

5 に答える 5

4

viewWillAppear-call で何らかの状態を設定し、それが後続の呼び出しで設定されているかどうかを確認する場合、私が見る唯一の実際の解決策 (またはむしろ iOS 4.x の回避策)。

-(void)viewWillAppear:(BOOL)animated {
    if (!viewWillAppearCalled) {
        viewWillAppearCalled = YES;

        /* do stuff */
    }
}

その後、iOS 4.x との互換性のために手動で安全に呼び出すことができます。

viewDidAppear、viewWillDisappear、viewDidDisappear についても同じことができます。

于 2012-01-13T10:21:30.863 に答える
1

[[UIDevice currentDevice] systemVersion] を使用して、ユーザーが実行している iOS のバージョンを確認します。4.3 の場合は、viewDidAppear メソッドを呼び出します。

于 2011-12-27T15:06:29.800 に答える
0

それが 2 回呼び出されていて、コードをルート ナビゲーションに追加したときにしか呼び出しを行うことができなかった場合は、viewDidAppear (iOS5 で最初に作成したもの) からコードを削除して、機能したものだけを残します。 4.3と5の両方で?

于 2011-12-27T20:16:41.710 に答える
-1

viewDidAppear:手動で呼び出す必要はありませんUIKit。呼び出しはそのままにしておいてください。手動呼び出しを削除する場合は、1 回だけ呼び出す必要があります。

于 2011-12-27T15:07:02.867 に答える