2

私は自分のアプリ (リッチ テキスト エディター) が (電子メールの添付ファイルなどから) 任意の RTF ファイルを開くことができると宣言しました。ユーザーが添付ファイルを選択すると、アプリケーション デリゲートは「loadContent: (NSURL *) url」メッセージを UiwebView コントローラーに送信します。レシーバーで、URL を取得し、RTF ファイルを UIWebView にロードします。

- (void) loadContent: (NSURL *) passedURL
{
    if (passedURL) { 
        [self.myWebView loadRequest:[NSURLRequest requestWithURL:passedURL]];
    } else {
        NSBundle *bundle = [NSBundle mainBundle];
        NSURL *indexFileURL = [bundle URLForResource:@"index" withExtension:@"html"];
        [self.myWebView loadRequest:[NSURLRequest requestWithURL:indexFileURL]];

    }
}

そうすれば、すべてうまくいき、「myWebView」はRTFファイルの内容を表示します。問題は、このビューのコンテンツを編集可能にする必要があり、コードには「index.html」バンドル ファイルに含まれている JavaScript を含める必要があることです。アプリ起動時に読み込みます。そこで、RTF ファイルから作成された HTML コードを抽出するコードを追加して、後で完全なコードを再作成できるようにし、抽出したコードを次のようなタグに挿入します。

<div id="content" contenteditable="true"> imported html from rtf should be there</div>

それを取得するために loadContent メソッドを変更しました。

- (void) loadContent: (NSURL *) passedURL
{
    if (passedURL) { 
        [self.myWebView loadRequest:[NSURLRequest requestWithURL:passedURL]];
        NSString *dum=[self.myWebView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML;"];
        NSLog(@"%@",dum);
    } else {
        NSBundle *bundle = [NSBundle mainBundle];
        NSURL *indexFileURL = [bundle URLForResource:@"index" withExtension:@"html"];
        [self.myWebView loadRequest:[NSURLRequest requestWithURL:indexFileURL]];

    }
}

NSLog の結果を見ると、次の html しか得られません

<div id="content" contenteditable="true">Hello folks</div>

rtfファイルをロードするのmyWebViewのHTMLコンテンツはどれでしたか...

何が起こっているのか分かりますか?表示された myWebView が新しいコードを表示するのに、dumが以前のコードを表示するのはなぜですか? loadRequest が別のスレッドで実行され、次の命令を実行するときに myWebView に以前のコードが含まれているためですか?

ありがとう

[編集] また、webViewDidFinishLoad: デリゲート メソッドで webView のコンテンツを NSLog しようとしましたが、同じ結果が得られました: RTF 添付ファイルを開く前のこの webView のコンテンツです。同期的にロード要求を行うことはできますか?

4

1 に答える 1

2

これは、loadRequest が非同期であるためです。その NSLog を試す前に、ロードが完了するのを待つ必要があります。UIWebViewDelegateのドキュメントをご覧ください。webViewDidFinishLoad: 内/後に NSLog を試してみると、より良い結果が得られるはずです。

于 2012-04-20T23:21:07.500 に答える