WKWebView.loading返回无法识别的选择器

时间:2016-04-10 04:59:31

标签: ios xcode swift 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)
        })
    }
}

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

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

任何和所有的帮助将非常感激:)我认为这是因为我调用webview.loading但我不知道为什么会导致崩溃。

2 个答案:

答案 0 :(得分: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对象取出。希望这会有所帮助。

答案 1 :(得分:0)

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

使用NSTimer参数调用方法。所以方法是接收触发方法的NSTimer实例。不是WKWebView实例。获取WKWebView实例。使用timer的userInfo属性。

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

__ NSCFTimer是NSTimer实例,NSTimer不提供isLoading。