1

私は多くの同様の質問を見つけましたが、とにかく私の問題の解決策を見つけることができませんでした. したがって、私のアプリ (tabView で構成されています) は、最初の起動後にサーバーからデータをダウンロードする必要があります。これを実行するために、Reachability.h/m と NSNotification defaultCenter を使用してインターネット接続をチェックするモーダル ビューコントローラーを呼び出します。インターネットに接続できる場合、ダウンロードが開始され、データが保存されます。完了したら、モーダルで開いたビューコントローラーを閉じたいのですが、何度もリロードしています。私はこれにほぼ2日間固執しています、助けてください:)

これは私のコードの一部です: 最初の ViewController で

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    //checking for data if not calls modalViewController
    if(firstStart){
        [self performSegueWithIdentifier:@"startDownload" sender:self];
    }

}

秒で(モーダルViewController)

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:YES];
    // check for internet connection
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];

     internetReachable = [Reachability reachabilityForInternetConnection];
     [internetReachable startNotifier];

     // check if a pathway to a random host exists
     hostReachable = [Reachability reachabilityWithHostName: @"www.apple.com"];
     [hostReachable startNotifier];  

}

インターネット接続が存在する場合、checkNetworkStatus でインターネット接続のチェックが行われ、JSON のダウンロードと解析が実行され、最後に Close メソッドが呼び出されます

-(void)Close
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

この呼び出しの後、画面は最初の ViewController に移動し、すぐに 2 番目に変わり、すべての処理が再び実行されます。

4

1 に答える 1

1

問題は、最初のView Controllerが最初に表示さviewDidAppearれたときだけでなく、2番目のView Controllerのモーダルが閉じられて最初のビューが再表示されたときにも呼び出されることです。viewDidAppearいくつかの変数をチェックしていますfirstStartが、明らかにこの変数は最初のコントローラーのイニシャルと最初のコントローラーの 2 番目のfirstStart間で適切にリセットされていません。viewDidAppearviewDidAppear

2 番目のコントローラーでこの変数の値を更新する必要がありfirstStartます (デリゲート プロトコルなどを介して)。またはfirstStart、最初のビューが再表示されたときに を再計算する必要があります。

于 2013-02-17T14:00:54.790 に答える