我运行一个看起来像这样的计时器:
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但我不知道为什么会导致崩溃。
答案 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。