【发布时间】:2018-02-27 15:02:12
【问题描述】:
这是我在 swift 中的第一个项目,是的,我已经看到关于这个主题的类似问题已经存在,我几乎阅读了所有内容,但我仍然无法让我的代码正常工作。
我有一个实现WKScriptMessageHandler 协议的类,以提供iOS 和WKWebView 中托管的javascript 之间的桥梁。
在从 javascript 传递的参数中(解释为 NSDictionary),我有一个名为 _method 的参数,其中包含 javascript 想要调用的 swift 方法名称。
方法名称在 swift 端成功提取,然后我尝试使用 Selector 调用它,这是我失败的地方:
class AppScriptMessageHandler: NSObject, WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
let dict = message.body as! NSDictionary;
let method = dict.value(forKey: "_method") as? String ?? "";
let selector = Selector(method); // method = "getDocumentsFolder"
let ret = perform(selector)?.takeUnretainedValue()
print(ret!)
}
func getDocumentsFolder() -> String {
return "Pippo"
}
}
一切都很好,直到我尝试做let ret = perform(selector)。在这里我得到以下运行时错误:
2018-02-27 15:49:37.279730+0100 wktest[8375:198645] *** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[wktest.AppScriptMessageHandler getDocumentsFolder]: unrecognized selector sent to instance 0x604000019ef0'
我哪里做错了?我也尝试将: 附加到method 但我仍然遇到同样的错误
提前感谢您的帮助!
【问题讨论】: