2012-04-20 42 views
2

我宣佈我的應用程序(一個富文本編輯器)能夠打開任何RTF文件(例如來自電子郵件附件)。當用戶選擇附件時,應用程序委託向UiwebView控制器發送「loadContent:(NSURL *)url」消息。在接收端,我得到的網址,並使用在UIWebView中導入一個RTF文件(content editable)

- (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]]; 

    } 
} 

這樣做是裝載在一個UIWebView的RTF文件,一切都沒事了,「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> 

這是myWebView 的HTML內容之前我裝的RTF文件...

你有什麼想法嗎?爲什麼dum顯示以前的代碼,因爲顯示的myWebView顯示新代碼?是否因爲loadRequest是在一個單獨的線程中執行的,並且在執行下一條指令時,myWebView仍然包含前面的代碼?

感謝

將帖子我也試圖在NSLog的webViewDidFinishLoad web視圖的內容:委託方法,但得到同樣的結果:我打開RTF附件文件之前,該webView的內容。是否有可能以同步方式進行加載請求?

回答

2

這是因爲loadRequest是異步的。您需要等待負載完成,然後再嘗試使用NSLog。查看UIWebViewDelegate文檔。在webViewDidFinishLoad內部/之後嘗試NSLog:並且你應該得到更好的結果。

+0

謝謝。我在webViewDidFinishLoad中做了它,但得到了相同的結果... – Denis 2012-04-20 23:30:13

+0

你可以用你現在擁有的東西來更新這個問題嗎? – 2012-04-20 23:49:57

+0

我已經做到了! – Denis 2012-04-20 23:53:22