2016-04-10 2 views
0

ich einen Timer ausführen, die wie folgt aussieht:WKWebView.loading gibt Unbekannter Selektor

else if label == "Instagram" && defaults.boolForKey("instagramswitch") { 
      activeWebview.loadRequest(request) 
      let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC))) 
      dispatch_after(dispatchTime, dispatch_get_main_queue(), { 
       self.i = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("instagram:"), userInfo: activeWebview, repeats: true) 
      }) 
} 

und die Funktion sieht wie folgt aus:

func instagram(webview: WKWebView) { 
    if webview.loading == false { 
     let code: String = "document.getElementsByClassName('2yal _csflf').item(3).click();" 
     webview.evaluateJavaScript(code, completionHandler: nil) 
     let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC))) 
     dispatch_after(dispatchTime, dispatch_get_main_queue(), { 
      self.i = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("instagramloaded:"), userInfo: webview, repeats: true) 
     }) 
    } 
} 

Ich erhalte eine Fehlermeldung auf dieser Linie - „wenn Webansicht .loading == false {“und der Fehler wird:

2016.04.10 15: 16: 53,679 PF 0,5 [878: 241.174] - [__ NSCFTimer isLoading]: Unbekannter Selektor gesendet Instanz 0x145a03fe0

Jede und alle Hilfe würde sehr geschätzt werden :) Ich denke, es ist, weil ich webview.loading aufrufen, aber ich habe keine Ahnung, warum das einen Absturz verursachen würde.

Antwort

1

Sie sollten die Methode, wie unten ändern,

func instagram(timerObject: NSTimer) { 
    if let webview = timerObject.userInfo as! WKWebView{ 
    if webview.loading == false { 
     let code: String = "document.getElementsByClassName('2yal _csflf').item(3).click();" 
     webview.evaluateJavaScript(code, completionHandler: nil) 
     let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC))) 
     dispatch_after(dispatchTime, dispatch_get_main_queue(), { 
      self.i = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("instagramloaded:"), userInfo: webview, repeats: true) 
     }) 
    } 
    } 
} 

Da das Objekt in dem Argument wird als NSTimer Objekt erhalten, und Sie müssen die Daten übernehmen, die Sie aus dem Methodenaufruf als Objekt userinfo gesendet . Hoffe das hilft.

0
Selector("instagram:") mapping to func instagram(webview: WKWebView) 

ruft Methode mit NSTimer Argument auf. Die Methode empfängt also eine NSTimer-Instanz, die eine Methode auslöst. Nicht WKWebView-Instanz. Um WKWebView-Instanz zu erhalten. Verwenden Sie die userInfo-Eigenschaft des Timers.

Das ist, warum Crash passiert, [__NSCFTimer isLoading]: Unbekannter Selektor an Instanz gesendet 0x145a03fe0

__NSCFTimer ist NSTimer Instanz und isLoading ist mit NSTimer nicht zur Verfügung.