2016-11-21 153 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功能工作正常,如果直接從ViewController叫,但前提是直接調用的JavaScript。

任何想法的人?

酥料餅的代碼

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

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

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

視圖控制器代碼

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

「但我不知道爲什麼」 - 編譯器意外地發現零,同時展開一個可選值。這是在沒有提供上下文代碼的情況下得到的最佳答案:/ – Danoram

+0

對不起,如果我添加一些代碼會有幫助;) – kb12abz

回答

0

ViewController().callViewControllerMethod()就是爲什麼你的錯誤,你基本上創建ViewController新的實例,並告訴它做什麼,這是不一樣的作爲目前的ViewController實例你有

要解決你的問題,你必須創建一個協議/ del egate PopOver告訴ViewController自己執行callViewControllerMethod

+0

好的,謝謝,這很有道理爲什麼我得到零 - 你知道我在哪裏可以找到如何做代表? - 我是一個新的斯威夫特:/ – kb12abz

+0

有很多教程,你可以檢查[this](http://stackoverflow.com/questions/24099230/delegates-in-swift)或[this](http:// useyourloaf.com/blog/quick-guide-to-swift-delegates/) – Tj3n