2016-11-21 7 views
0

Я пытаюсь передать взаимодействие пользователей с представления popOver на ViewController, чтобы затем взаимодействовать с WKWebView.Передача значений WKWebView Swift

В настоящее время поповер имеет кнопки, которые при выборе вызовов ViewController().callViewControllerMethod() этот метод работает корректно и не называют callViewControllerMethod().

Внутри callViewControllerMethod() есть некоторый код для оценкиJavascript на WKWebView. Когда код побежал он попадает в evaluateJavascript код и бросает "fatal error: unexpectedly found nil while unwrapping an Optional value"

Но я понятия не имею, почему - на JavaScript, который находится в пределах функции evaluateJavascript работает корректно, если вызывается непосредственно из 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

«Но я понятия не имею, почему» - компилятор неожиданно нашел нуль, разворачивая необязательное значение. Это лучший ответ, который вы получите без предоставления какого-либо кода из контекста:/ – Danoram

+0

извините, помогите, если я добавлю код;) – kb12abz

ответ

0

Это ViewController().callViewControllerMethod() почему вы получите ошибку, вы в основном создать новый экземпляр ViewController и сказать ему что-то сделать, это не то же самое как текущий ViewController экземпляр у вас есть

Чтобы исправить возникшую проблему, вам необходимо создать протокол/del egate на PopOver, чтобы сообщить ViewController, чтобы выполнить callViewControllerMethod от себя

+0

okay спасибо, что имеет смысл, почему я получаю ноль - знаете ли вы, где я могу искать, как делать делегат? - Я новый для Swift:/ – kb12abz

+0

Для этого есть много учебников, вы можете проверить [this] (http://stackoverflow.com/questions/24099230/delegates-in-swift) или [это] (http: // useyourloaf.com/blog/quick-guide-to-swift-delegates/) – Tj3n