Ich schreibe eine iOS-App (mit Xcode 7.3 und Swift 2.2) mit JavascriptCode-Framework. JavaScript-Methoden aus Swift-Funktionen aufrufen perfekt, aber wenn ich die schnelle Methode von Javascript aufrufen, zeigt xcode einfach eine "Laden" Art von Symbol und nichts passiert. Ich muss xcode "erzwingen", um aus diesem Zustand herauszukommen. Ich habe https://www.raywenderlich.com/124075/javascriptcore-tutorial und http://nshipster.com/javascriptcore/ gefolgt und ich versuche ziemlich einfache Anrufe.Aufruf von swift-Methode von JavaScript hängt xcode und Anwendung
Hat jemand diese Art von Problem konfrontiert?
Mein SWIFT-Code ist wie folgt:
@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)"
}
}
ich den Kontext am Initialisierung wie folgt:
runContext = JSContext()
runContext.name = "test_Context"
windowToJs = WindowJS(name: "test")
runContext.setObject(windowToJs.self, forKeyedSubscript: "WindowJS")
Wenn ich die letzten beiden Zeilen in obigen Code mit folgenden Code ohne Instanziierung ersetzen, Der Code wird einfach nicht geladen.
runContext.setObject(WindowJS.self, forKeyedSubscript: "WindowJS")
Und der Javascript-Code ist so einfach wie
function check() {
return WindowJS.getName()
}
ich der Haltepunkt in der Prüfung JS Funktion schlagen sehen Sie sind und wenn die WindowJS.getName aufgerufen wird, Xcode wird einfach nicht mehr reagiert.
Wie wird der JavaScript-Aufruf ausgelöst? Wird es zufällig ausgelöst, indem es (auch als Nebeneffekt) von Swift genannt wird? ZB ist es möglich, dass Sie mit einem Swift-> JS-> Swift-Zyklus enden? – DarkDust
@DarkDust Danke! Das ist was passiert. Wie erreiche ich einen asynchronen Effekt wie den von "postMessage in JavaScript in WKWebView" in einem JSContext? – Amruta