2016-11-21 7 views
0

popOverビューからViewControllerへのユーザー操作を渡してWKWebViewとやりとりしようとしています。WKWebView Swiftに値を渡す

現在ポップオーバーは、通話 ViewController().callViewControllerMethod() を選択した場合は、この方法が正しく動作してcallViewControllerMethod()を呼び出すないボタンがあります。

callViewControllerMethod()は、WKWebViewでJavascriptを評価するコードです。コードが実行されると、それはevaluateJavascriptコードを打つと"fatal error: unexpectedly found nil while unwrapping an Optional value"

をスローしかし、私は、なぜ何のアイデアもない - evaluateJavascript関数内でJavascriptをViewControllerから直接呼び出す場合は正常に動作しますが、直接呼び出さ場合にのみを。

あなたがエラーを取得する理由

ポップオーバーコード

class BackgroundViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    @IBAction func button1(_ sender: AnyObject!) { 
     print("button 1 selected") 
     ViewController().callViewControllerMethod() 
    } 
} 

のViewControllerコード

class ViewController: UIViewController, WKNavigationDelegate, UISearchBarDelegate { 
    func callViewControllerMethod() { 
     print("got to the method") 
     webView.evaluateJavaScript("document.body.style.background = \"white\";") { (result, error) in 
      if error != nil { 
       print(result as Any) 
      } 
      else { 
       print("background code completed") 
      } 
     } 
    } 
} 
+0

問題の発生場所を正確に示すコードサンプルを提供してください。 – paulvs

+0

"しかし、私は考えていません" - オプション値をアンラッピングしている間にコンパイラが予期せずnilを見つけました。/ – Danoram

+0

私はいくつかのコードを追加しても助けになります; – kb12abz

答えて

0

これViewController().callViewControllerMethod()は、あなたが基本的にViewControllerの新しいインスタンスを作成して、何かをすることを教えているが、それは同じではありません現在のViewControllerインスタンスがある場合

問題を解決するには、プロトコル/ del PopOverViewControllerを実行してcallViewControllerMethodを実行してください

+0

大丈夫感謝していますなぜ私は何も得られません - あなたはどこで私がどのように見えるか知っていますか?代議員をする? - 私はSwiftに新しい:/ – kb12abz

+0

それのためのチュートリアルがたくさんあります、あなたは[this](http://stackoverflow.com/questions/24099230/delegates-in-swift)か[this](http:// useyourloaf.com/blog/quick-guide-to-swift-delegates/) – Tj3n

関連する問題