8

アプリでを使用してUIWebViewいます。通常は問題なく動作しますが、アプリがメモリ警告を受け取り、最終的にクラッシュする状況があります。

これでコンテンツをロードします:

[self.webView loadHTMLString:htmlString baseURL:baseURL];

25 以上の YouTube ビデオが含まれているケースが 1 つありますhtmlString(これは私の考えではありません。これは私が受信している Web ページです)。したがって、この場合、アプリはいくつかのメモリ警告を受け取り、最終的にクラッシュします。

どうすればこの状況を管理できますか? さまざまな手順で HTML ファイルを読み込むことはできますか?

これが関係しているかどうかはわかりませんが、UIWebViewサイズ (および Web ビューを囲むスクロール ビューのコンテンツ サイズ) を動的に設定しています。これはコードです:

- (void) webViewDidFinishLoad:(UIWebView *)webView
{
    // Adaptamos las vistas al contenido y ocultamos el indicador de actividad

    // Ponemos el webView del tamaño justo del contenido

    CGRect frame = webView.frame;
    // Hace falta cambiar la height porque si no, no coge los cambios. Visualmente no se ve diferencia
    frame.size.height = 1;
    webView.frame = frame;
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
    frame.size.height = fittingSize.height;
    webView.frame = frame;

    // Movemos el botón y lo ponemos donde acabe el webView
    CGRect buttonFrame = self.visitSiteButton.frame;
    buttonFrame.origin.y = frame.origin.y + frame.size.height + 20;
    self.visitSiteButton.frame = buttonFrame;

    // Ampliamos el contenSize del scrollview general para que quepa todo el webView
    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, self.visitSiteButton.frame.origin.y + self.visitSiteButton.frame.size.height + 10);
}

どうもありがとう、

カルロス

4

3 に答える 3

3

いたずらな小技はいかがですか。以下のコードでページの html を取得します。

NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
    NSURLResponse * response = nil;
    NSError * error = nil;
    NSData * data  = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString* newStr = [[NSString alloc] initWithData:theData
                                     encoding:NSUTF8StringEncoding];

正規表現を使用してビデオ要素を検索し、カスタム イメージ ハイパーリンク タグ > に置き換えます。HTML 文字列を次のように表示します。

[webView loadHTMLString: baseURL:nil];
于 2013-01-22T15:39:38.770 に答える
2

厳しい状況。コードが原因ではないと確信している場合(機器を使用してリークをチェックします)。次に最善の策は、クラッシュを回避することです。いくつかの可能性が思い浮かびます。

1)メモリ警告を受け取った場合、次の可能性があります。

if (self.webView.loading) {
    [self.webview stopLoading];
    //inform user page cannot be fully loaded.
}

2)それが機能しない場合は、メモリ警告に従って、ページが大量のリソースを引き込み続けるのを防ぐreturn NOことができる場合があります。UIWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:

3)おそらく最後の手段として、webviewのロードを停止し、ビューから削除して、解放します。

それらの1つが機能することを願っています。クラッシュしているページを共有できますか?テスト目的に役立つようです!また、Appleがより低いレベルでこれに対処したい場合に備えて、Appleにrdarを提出する必要があります。

于 2013-01-20T17:04:31.507 に答える
0

1 つの HTML ページに 25 の youtube ビデオを表示するには多すぎるようです。メモリがいっぱいになり、アプリが強制終了されます。

HTML ページのデザインを変更したくないのであれば、やるべきことはあまりないと思います。しかし、あなたが望むなら、たくさんの選択肢があります。たとえば、(UITableView のように) 少数のビデオのみが表示されるように、HTML の遅延ロードを (javascript を介して) 実装することができます。または、YouTube にリンクする HTML コードを他の「軽い」コードに置き換えて、ユーザーが新しい UIWebView を読み込んで特定のビデオを視聴できるようにすることもできます。等。

于 2013-01-14T18:35:30.160 に答える