2016-04-10 3 views
0

бегает таймер, который выглядит следующим образом:WKWebView.loading возвращает непризнанный селектор

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) 
      }) 
} 

и функция выглядит следующим образом:

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) 
     }) 
    } 
} 

Я получаю ошибку на этой линии - «если WebView .loading == ложь {»и ошибка:

2016-04-10 15: 16: 53,679 ПФ 0,5 [878: 241174] - [__ NSCFTimer isLoading]: непризнанные селектор направлен например 0x145a03fe0

Любая помощь была бы очень признательна :) Я думаю, что это потому, что я вызываю webview.loading, но я понятия не имею, почему это может вызвать сбой.

ответ

1

Вы должны изменить способ, как показано ниже,

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) 
     }) 
    } 
    } 
} 

Поскольку объект в качестве аргумента принимается в качестве объекта NSTimer, и вы должны вынуть данные, которые вы послали из вызова метода в качестве объекта USERINFO , Надеюсь это поможет.

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

метод вызова с аргументом NSTimer. Таким образом, метод получает экземпляр NSTimer, который запускает метод. Не экземпляр WKWebView. Чтобы получить экземпляр WKWebView. Используйте свойство userInfo таймера.

Вот почему авария происходит, [__NSCFTimer isLoading]: непризнанные селектор направлен например 0x145a03fe0

__NSCFTimer является NSTimer экземпляр и isLoading не доступен с NSTimer.

Смежные вопросы