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 对象发送的数据。希望这有帮助。
我运行一个计时器,看起来像这样:
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 对象发送的数据。希望这有帮助。