2016-11-21 6 views
0

Ich versuche, eine Benutzerinteraktion von einer popOver-Ansicht an ViewController zu übergeben, um dann mit WKWebView zu interagieren.Übergabe von Werten an WKWebView Swift

Derzeit ist die popover hat Schaltflächen, wenn Anrufe ausgewählt ViewController().callViewControllerMethod() diese Methode richtig funktioniert und callViewControllerMethod() nicht nennen.

Innerhalb von callViewControllerMethod() ist ein Code zur Auswertung von Javascript auf einem WKWebView. Wenn der Code läuft es trifft den evaluateJavascript Code und wirft "fatal error: unexpectedly found nil while unwrapping an Optional value"

Aber ich habe keine Ahnung, warum - das Javascript, das innerhalb der evaluateJavascript Funktion korrekt funktioniert, wenn direkt von ViewController genannt, aber nur, wenn direkt aufgerufen.

Irgendwelche Ideen jemand?

popover-Code

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-Code

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

Bitte geben Sie ein Codebeispiel, das genau zeigt, wo das Problem auftritt. – paulvs

+0

"Aber ich habe keine Ahnung warum" - der Compiler hat beim Entpacken eines Optionalen Werts unerwartet null gefunden. Dies ist die beste Antwort, die Sie erhalten, ohne Code aus dem Kontext zur Verfügung stellen:/ – Danoram

+0

Tut mir leid hilft, wenn ich etwas Code hinzufügen;) – kb12abz

Antwort

0

Diese ViewController().callViewControllerMethod() ist, warum Sie den Fehler, Sie sind im Grunde neue Instanz von ViewController erstellen und ihm sagen, etwas zu tun, es ist nicht das gleiche als die aktuelle ViewController Instanz haben Sie

Um Ihr Problem zu beheben, müssen Sie ein Protokoll erstellen/del egate auf der PopOver, um die ViewController zur Ausführung callViewControllerMethod von sich selbst zu sagen

+0

okay, danke das macht Sinn, warum ich Nil - wissen Sie, wo ich nach wie suchen kann Delegieren zu tun? - Ich bin neu zu Swift:/ – kb12abz

+0

Es gibt viele Tutorial für das, Sie können [this] (http://stackoverflow.com/questions/24099230/delegates-in-swift) oder [dies] (http: // useyourloaf.com/blog/quick-guide-to-swift-delegates/) – Tj3n

Verwandte Themen