iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从JavaScript调用swift方法会挂起xcode和应用程序大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我正在使用 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-tutorialhttp://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只是没有响应.

解决方法

@H_197_48@ 你正在创建一个死锁,因为你从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和应用程序所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。