1

解決しようとしている 2 つの問題があります。1 つはタブ コントローラー自体を更新することで、もう 1 つはタブ コントローラーのコンテンツを更新することです。

タブ コントローラー自体を更新する理由は、アプリケーションに、タブの順序を設定し、各タブのコンテンツを設定する JSON を返す Web 呼び出しがあるためです。アプリケーションから戻ってアプリケーションに再入力すると、タブコントローラーが次のように更新されるようにしました

exit(0)

AppDelegates ApplicationDidEnterBackground で、ユーザーがバックアウトして再度インしたときにコントローラーが更新されるようにします。applicationDidFinishLaunchingWithOptions で、タブ オーダーの設定に使用される JSON を呼び出す Web 呼び出しを設定しました。これが良い方法ではないことは承知していますが、当分の間、私が考えることができる唯一の解決策です。他にどのように TabController を更新できますか?

タブのコンテンツについては、このコードを使用して更新されます

   becomeActiveObserver = [[NSNotificationCenter defaultCenter] 
                         addObserverForName:UIApplicationDidBecomeActiveNotification
                         object:nil 
                         queue: nil 
                         usingBlock:^(NSNotification *note){ 

                          [self refresh];
                          [self viewDidUnload];
                         }]; 

このタイプのコードを 5 つのタブのそれぞれに設定しました。これは非常にうまく機能しますが、問題は、アプリケーションを終了して再度アクセスしたときにのみコンテンツが更新されることです。Web 呼び出しは定期的に行われます。Web 呼び出しが行われると、コンテンツが自動的に更新され、バックアウトしてアプリケーションに再度アクセスする必要がなくなります。

テスト目的で、設定画面にボタンを設定しました (設定画面は、タブの 1 つの別のビューにすぎません)。読み取り JSON でクリックすると、Web 呼び出しから取得した JSON とは異なる iPhone ディレクトリに保存されます。 (サーバーに行って、そこで JSON を変更し続ける必要がなくなります)。このボタンをクリックすると、この新しい JSON が読み取られ、コンテンツが更新され、ビューが更新されます。私はこれをテストし、JSON が読み取られ、データが更新されています (これを確認するために使用している JSON を読み取るボタンを各画面に設定しました)。再度申請してください。

デバイスに保存されている JSON を読み取るために設定画面で設定した一時コードは次のとおりです。

-(IBAction)RefreshApp:(id)sender{     



NSFileManager *fileManager = [NSFileManager defaultManager];

     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"widgjson" ofType:@"json"];  
     NSData *myData = [NSData dataWithContentsOfFile:filePath];  
     NSString *responseString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];   

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *docDir = [paths objectAtIndex: 0];
        NSString *docFile = [docDir stringByAppendingPathComponent: @"json.txt"];
        [fileManager removeItemAtPath:docFile error:NULL];
        [responseString writeToFile:docFile atomically:NO encoding:NSUTF8StringEncoding

DashboardVC *db = [[DashboardVC alloc] init];
    [db refresh];
    [db viewDidUnload];

}

下部に、タブの 1 つから更新を呼び出して、ビューの 1 つを更新しようとしたことがわかります。更新コードは、クラス自体から呼び出した場合にのみ機能するようです。別のクラスからアクセスすると、更新するようには見えません。

Web 呼び出しが行われると、すべてのタブが一度に更新されるようにします。これをどのように行うかについてのアイデアはありますか?

誰かが私を正しい方向に向けることができれば、とても感謝しています。

4

1 に答える 1

2

UITabBarControllerのsetViewControllers: animated:メソッドは、ここで使用したいものです。

タブを並べ替える通知を受け取ったら、その関数を使用して、タブバーで所有(および参照)されているさまざまなView Controllerを、タブの順序どおりの配列で渡します。現れる。

于 2012-05-18T07:55:08.720 に答える