0

アプリがアクティブになるたびに (ホーム画面から開始するか、ホームボタンをダブルタップして)、アプリケーションの webview が更新されるようにします。

私の ViewController.m は次のようになります。

- (void)viewDidLoad
{
NSURL *url = [NSURL URLWithString:@"http://cargo.bplaced.net/cargo/apptelefo/telefonecke.html"];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[_webView loadRequest:req];

[super viewDidLoad];

}

- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[_webView reload];
}

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ( inType == UIWebViewNavigationTypeLinkClicked ) {
    [[UIApplication sharedApplication] openURL:[inRequest URL]];
    return NO;
}

return YES;
}

このコードの何が問題なのですか? 前もって感謝します!

4

1 に答える 1

3

viewDidAppear:アプリがフォアグラウンドになったときに起動するとは思いません。これらの viewWill* および viewDid* メソッドは、ビューの遷移 (モーダル、プッシュ) 用であり、アプリのライフサイクル イベントとは関係ありません。

あなたがしたいことは、特にフォアグラウンド イベントに登録し、通知を受け取ったときに Web ビューを更新することです。viewDidAppear:メソッドで通知を登録し、メソッドで通知を登録解除しますviewDidDisappear:。これにより、コントローラーが消えた場合に、ユーザーに何も表示されていないときに、コントローラーが webview を再読み込みし続けないようにします (または、ゾンビ インスタンスを再読み込みしてクラッシュさせようとします)。次のようなものが機能するはずです。

- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];

    [_webView reload]; // still want this so the webview reloads on any navigation changes
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];
}

- (void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillEnterForegroundNotification object:nil];
}

- (void)willEnterForeground {
    [_webView reload];
}
于 2012-11-25T14:38:15.113 に答える