WKWebView.loading returns 无法识别的选择器

WKWebView.loading returns unrecognized selector

我运行一个计时器,看起来像这样:

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

我在这一行收到一个错误 - "if webview.loading == false {" 错误是:

2016-04-10 15:16:53.679 PF 0.5[878:241174] -[__NSCFTimer isLoading]:无法识别的选择器发送到实例 0x145a03fe0

我们将不胜感激 :) 我认为这是因为我调用了 webview.loading 但我不知道为什么会导致崩溃。

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

使用 NSTimer 参数调用方法。因此方法正在接收触发方法的 NSTimer 实例。不是 WKWebView 实例。获取 WKWebView 实例。使用定时器的 userInfo 属性。

这就是崩溃发生的原因, [__NSCFTimer isLoading]:无法识别的选择器发送到实例 0x145a03fe0

__NSCFTimer 是 NSTimer 实例,isLoading 不适用于 NSTimer。

你应该像下面这样修改方法,

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 对象发送的数据。希望这有帮助。