gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:09:39 25 4
gpt4 key购买 nike

我正在使用 JavascriptCode 框架编写一个 iOS 应用程序(使用 xcode 7.3 和 swift 2.2)。从 swift 调用 javascript 方法完美无缺,但是当我从 javascript 调用 swift 方法时,xcode 只显示“加载”类型的符号,没有任何反应。我需要“强制退出”xcode 才能退出此状态。我关注了https://www.raywenderlich.com/124075/javascriptcore-tutorialhttp://nshipster.com/javascriptcore/我正在尝试非常简单的调用。

有人遇到过这种问题吗?

我的swift代码如下:

@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 函数中添加以下代码来解决 setTimeout。

let setTimeout: @convention(block) (JSValue, Int) -> () = 
{ callback, timeout in
let timeVal = Int64(timeout)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, timeVal), dispatch_get_main_queue(), { callback.callWithArguments(nil)})
}

为了将 native 代码暴露给 JS 上下文,我还添加了以下内容。

runContext.setObject(unsafeBitCast(setTimeout, AnyObject.self), forKeyedSubscript: "setTimeout")

然后一切正常。

关于xcode - 从 JavaScript 调用 swift 方法挂起 xcode 和应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37908059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com