2017-02-20 3 views
0

毎回ロードしていない:私は押した場合のUIWebViewは、私は同じエラーを取得するのUIWebView上の別のURLをロードしようとする新しいURL

@IBAction func changeUrl(sender: UIButton) { 
    if LEDON { 
     let urlStr = NSString(format: "%@/?Led=0", self.url) 
     let req = URLRequest(url: URL(string: urlStr as String)!) 
     webView.loadRequest(req) 
     while(webView.isLoading) { 
      sender.isEnabled = false 
     } 
     sender.isEnabled = true 
     LEDON = false; 
    } else { 
     let urlStr = NSString(format: "%@/?Led=1", self.url) 
     let req = URLRequest(url: URL(string: urlStr as String)!) 
     webView.loadRequest(req) 
     while(webView.isLoading) { 
      sender.isEnabled = false 
     } 
     sender.isEnabled = true 
     LEDON = true; 
    } 
} 

:WebViewのについての私のコードは次のようである

SendDelegateMessage(NSInvocation *): delegate (webView:decidePolicyForNavigationAction:request:frame:decisionListener:) failed to return after waiting 10 seconds.

をUIButtonは初めてのコードでは完全に動作しますが、再度タップするとエラーになります。 どこが間違っていますか?

コード内の "url"変数はグローバル変数であり、私はすでにそれが正しいことを確認しています。

+0

あなたは{偽= sender.isEnabled}このしばらく(webView.isLoading)を使用する必要はありません。メインスレッドをフリーズし、アプリケーションが要求に対して応答できません。これにはデリゲートメソッドを使用する必要があります。 – Sergey

+0

whileループが終了すると、送信者は再びアクティブになります。私がアクションを再度呼び出すと、webViewはロードされませんが、ボタンは機能します。 – Francesco

答えて

1

問題スレッドとwebView:decidePolicyForNavigationA ction:request:frame:decisionListener:を呼び出すことはできません。

この使用してみてください:あなたはWKWebView

func webView(_ webView: WKWebView, 
      didFinish navigation: WKNavigation!) 
{ 
    yourButton.isEnabled = true 
} 

について

func webViewDidFinishLoad(UIWebView) 
{ 
    yourButton.isEnabled = true 
} 

を使用する必要があるのUIWebViewについて

func viewDidLoad() 
{ 
    ... 
    webView.delegate = self;//UIWebView 
    //webView. navigationDelegate = self;//WKWebView 
} 

@IBAction func changeUrl(sender: UIButton) { 
    if LEDON { 
     let urlStr = NSString(format: "%@/?Led=0", self.url) 
     let req = URLRequest(url: URL(string: urlStr as String)!) 
     webView.loadRequest(req) 
     sender.isEnabled = false 
     LEDON = false; 
    } else { 
     let urlStr = NSString(format: "%@/?Led=1", self.url) 
     let req = URLRequest(url: URL(string: urlStr as String)!) 
     webView.loadRequest(req) 
     sender.isEnabled = false 
     LEDON = true; 
    } 
} 

を=========== =========================

あなたはループは、このためにそれを変更しようとする時に使用したい場合:

while(webView.isLoading) { 
    sender.isEnabled = false 
    RunLoop.current.run(until: Date(timeIntervalSinceNow: 0.5)) 
} 
+0

ありがとう! – Francesco

1

あなたのアプリ上でHTTPとHTTPSを許可する必要があります:あなたのInfo.plistで

:あなたがメイン凍結している

while(webView.isLoading) { 
    sender.isEnabled = false 
} 

In Info.plist file add a dictionary with key 'NSAppTransportSecurity'

Add another element inside dictionary with key 'Allow Arbitrary Loads'

enter image description here

+0

既に完了しました! urlが正しく読み込まれるのは初めてです。他のすべての時間に問題があります – Francesco

+0

私のために働く!ありがとうございました –

関連する問題