从JavaScript调用swift方法会挂起xcode和应用程序

从JavaScript调用swift方法会挂起xcode和应用程序,第1张

概述我正在使用 JavascriptCode框架编写iOS应用程序(使用xcode 7.3和swift 2.2).从swift调用javascript方法是完美的,但是当我从javascript调用swift方法时,xcode只显示一个“加载”类型的符号,没有任何反应.我需要“强制退出”xcode才能摆脱这种状态. 我跟着 https://www.raywenderlich.com/124075/ja 我正在使用 JavascriptCode框架编写iOS应用程序(使用xcode 7.3和swift 2.2).从swift调用JavaScript方法是完美的,但是当我从JavaScript调用swift方法时,xcode只显示一个“加载”类型的符号,没有任何反应.我需要“强制退出”xcode才能摆脱这种状态.
我跟着 https://www.raywenderlich.com/124075/javascriptcore-tutorial和 http://nshipster.com/javascriptcore/,我正在尝试非常简单的电话.

有没有人遇到过这种问题?

我的快捷代码如下:

@objc protocol WindowJsExports : JsExport {   var name: String { get set }   func getname() -> String   static func createWindowWithname(name: String) -> WindowJs}@objc class WindowJs : NSObject,WindowJsExports {   dynamic var name: String   init(name: String) {       self.name = name   }       class func createWindowWithname(name: String) -> WindowJs {       return WindowJs(name: name)   }       func getname() -> String {       NSLog("getname called from Js context")       return "\(name)"   }}

我正在初始化上下文如下:

runcontext = jscontext()runcontext.name = "test_Context"windowToJs = WindowJs(name: "test")runcontext.setobject(windowToJs.self,forKeyedSubscript: "WindowJs")

如果我用上面的代码替换上面代码中的最后两行而不实例化它,代码就无法加载.

runcontext.setobject(WindowJs.self,forKeyedSubscript: "WindowJs")

而JavaScript代码就像

function check() {    return WindowJs.getname()}

我确实看到在Js函数检查中遇到了断点,当调用WindowJs.getname时,xcode只是没有响应.

解决方法 你正在创建一个死锁,因为你从Swift调用JavaScript到Swift.我不确定它为什么会出现死锁,但我最近在Mac上遇到了与WKWebVIEw类似的问题.

您需要将其解耦并使通信异步.这显然意味着在这种情况下你不能简单地从Js函数返回一个值.

要解耦,可以通过使用setTimeout延迟当前runloop迭代中JavaScript函数需要执行的工作来打破死锁:

function myFunction() {  setTimeout(function() {    // The actual work is done here.    // Call the Swift part here.  },0);}

整个本地↔︎JavaScript通信非常非常棘手.如果可以,请避免使用它.有一个名为XWebView的项目可以帮助你,因为它试图缓解两个世界之间的桥梁.

总结

以上是内存溢出为你收集整理的从JavaScript调用swift方法会挂起xcode和应用程序全部内容,希望文章能够帮你解决从JavaScript调用swift方法会挂起xcode和应用程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1020310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存