Web 呼び出しが行われた後、各タブのタブ コンテンツを更新しようとしています。これを行うために非常に多くの異なる方法を試しましたが、数え切れませんでした。誰かがこれがどのように可能か教えてください。
Web 呼び出しは、サーバーから JSON を呼び出し、それを使用してタブのコンテンツを更新するだけです。テスト目的で、設定クラス内にボタンを設定しました。設定クラスは、ホーム タブ内のビューで、更新というボタンがあります。クリックすると、アプリケーションの起動時に Web 呼び出しから呼び出されるものとは異なる、デバイスに保存されている JSON が取得されます。これにより、サーバー上の JSON を変更する必要がなくなります。
私が試したいくつかのテクニックを紹介します。誰かが私が間違っていることを教えてくれたらありがたいです.
クラスのインスタンスを作って、このようにrefreshメソッドを呼び出してみました
DashboardVC *db = [[DashboardVC alloc] init];
[db refreshMe];
ダッシュボードクラスの更新方法はこちら
-(void) refreshMe
{
[self loadView];
[self viewDidLoad];
}
しかし運がない。このメソッドは、Dashboard クラス内で呼び出すと機能しますが、別のクラスから呼び出すと機能しません。新しいクラスをインスタンス化し、その上でリフレッシュを呼び出すようになったと思います。だから私はそのテクニックをやめて、次の方法に移った
これはすべてのタブバーをループし、問題なくタブタイトルを変更するため、ViewControllers を適切にループしていることがわかります。
ViewDidAppear、viewWillAppearなどのビューメソッドもすべて試しましたが、うまくいきませんでした。
また、ダッシュボードクラスで作成したrefreshMeメソッドに、このようにtabControllerを介してアクセスしてみました
[[[self.tabBarController viewControllers] objectAtIndex:0] refreshMe];
しかし、やはりうまくいきません。これにより、アプリケーションがクラッシュするだけです。
このガイドを読みました
アップルのウェブサイトにありますが、個々のタブのコンテンツを更新する方法については触れていないようです。
私が望むのは、Web 呼び出しが行われた後に個々のタブのコンテンツを更新し、これを理解しようとして何年も費やしたことですが、何も機能していません。
誰かが私が間違っていることを教えてくれたら、とても感謝していますか?
事前にサンクス....
編集:
私が試したことを拡張する
Michael と話し合った結果、Apple のガイドラインに反して loadView を呼び出すべきではないことに気付きました。そのため、LoadView への参照をすべて削除しました。クラスのビュー、画像、テキストなどを設定する RefreshMe と呼ばれるすべてのメイン ViewControllers にメソッドを配置しました。そして、このメソッドは ViewDidLoad 内に配置されます。ここで、Web 呼び出しが行われた後にこれらのメソッドを呼び出せるようにして、アプリケーションを効果的に更新したいと考えています。
私の viewDidLoad は、すべてのメイン クラスで次のようになります。
- (void) viewDidLoad {
[super viewDidLoad];
[self refreshMe];
}
そして、refreshMe メソッドには、画面を設定するコードが含まれています。
Web 呼び出しから取得された JSON データは、5 つのタブのそれぞれのコンテンツを設定するため、Web 呼び出しの後にすべてを更新する必要があります。
私はviewControllersをループしてviewDidLoadを呼び出してみました。これにより、クラスを設定するrefreshMeメソッドが呼び出されますが、何も起こりません。私が使用したコードはこれでした
NSArray * tabBarViewControllers = [self.tabBarController viewControllers];
for(UIViewController * viewController in tabBarViewControllers)
{
[viewController viewDidLoad];
}
とりあえず私も入れました
NSLog(@"Method called");
各クラスの viewDidLoad で、それが呼び出されているかどうかをテストします。ただし、アプリケーションを最初にロードしたとき、またはアプリケーションを再入力したときにのみ、メッセージが出力されます。このメソッドは、設定画面の更新ボタンをクリックした後に呼び出される必要がありますが、呼び出されず、理由がわかりません。
なぜこれが機能しないのか、誰にも分かりますか?