0

sqlite データベースを使用してアプリケーションを作成しています。Web サービスから取得した情報でデータベースを更新します。次のように AppDelegate から Web サービスを呼び出します。

-(void)applicationDidBecomeActive:(UIApplication *)application{

    // get new information from web service
    // update sqlite database

}

UIActivityIndicatorViewWeb サービスにはかなりの時間がかかる可能性があるため、アクティブなものに を追加したいと考えてviewControllerいます。そしてもちろん、更新が完了したら削除してください。アイデア?

4

3 に答える 3

0
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    testView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 420, 480)];
    testView.backgroundColor = [UIColor redColor];
    [self.window.rootViewController.view addSubview:testView];
}

次に、完了したら次のことを行います。

[testView removeFromSuperview];
于 2012-12-14T09:20:41.733 に答える
0

各View Controller(または共通のスーパークラスView Controller)でUIApplicationDidBecomeActiveNotification、アプリケーションがアクティブになったときに送信される通知をリッスンします。

このようにして、多数の if を使用してアプリ デリゲートをコードの他の部分に結合することなく、各ビュー コントローラーにカスタム ロジックを設定できます (アクティブなビュー コントローラーを区別する必要がある場合)。

于 2012-12-14T10:20:06.283 に答える
-1

ビュー階層はどのような形でもとることができるため、現在表示されているビュー コントローラーを追跡することは、自分で行う必要があります。例外: アプリ内のすべてが UINavigationController 内で発生する場合、これを使用して常に現在のビュー コントローラーを取得できます。

[navigationController topViewController];

ただし、オーバーレイを表示するだけでよい場合は、そのビューをルート ビュー コントローラーのビューに追加するだけです。とにかく、すべての子View Controllerはサブビューとして表示されます。

UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[self.window.rootViewController.view addSubview:activityIndicator];
[activityIndicator startAnimating];

ただし、このように手動でビューをミックスに投入するのはあまりエレガントではありません。さまざまなネットワーク イベントが発生したときに通知を投稿し、各ビュー コントローラーが適切に更新されるようにすることを検討します。

于 2012-12-14T09:20:21.070 に答える