2016-04-20 20 views
0

Ich verwende die WKWebView Komponente in meiner Mac App, um eine Webseite anzuzeigen. Diese Webseite Daten an den native App sendet JavaScript-Aufruf webkit.messageHandlers["callbackHandlerName"].postMessage(dataObject);WKScriptMessage.body verursacht EXC_BAD_ACCESS

kann ich die meisten Nachrichten in meiner native App ohne Probleme (und dann verwandeln ihren Körper zu NSDictionary) erhalten, aber einige Arten von Nachrichten bewirkt, dass die EXC_BAD_ACCESS, wenn ich versuche, Zugriff auf Eigenschaft message.body. Ich kann nicht herausfinden, warum manche Daten nicht auf die native App und andere können gesendet werden (in beiden Fällen Daten JavaScript-Objekte verschachtelt sind)

internal func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) 
{ 
    switch (message.name) 
    { 
     case "nativeCallbackA": 
      onNativeCallbackA(message.body) 
     case "nativeCallbackB": 
      onNativeCallbackB(message.body) //throws EXC_BAD_ACCESS 
     default: 
      print("Unsupported message " + message.name); 
    } 
} 

Gebe es Einschränkungen für Nachrichten an der native App geleitet, um die JS mit postMessage anrufen?

+0

kann es sein, dass einige Ihrer Nachrichten keinen 'body' haben 'vielleicht? Könntest du überprüfen, ob "Körper" gleich Null war, bevor du versuchst, etwas damit zu tun? – pbodsk

+0

Ich kann es nicht überprüfen, weil "Wert des Typs 'AnyObject' niemals Null sein kann". Außerdem hat mein nativeCallbackB einen leeren Körper –

Antwort

0

Ohhh! Ich mein Problem gelöst:

Mein Handler nativeCallbackB wurde erklärt, wie:

func nativeCallbackB(data: Any) { //... }

aber Art von WKScriptMessage.body ist AnyObject

So änderte ich die Erklärung der Handler:

func nativeCallbackB(data: AnyObject) { //... }

und jetzt ist es wor ks (aber ich weiß immer noch nicht, warum einige einige Nachrichten auch mit falscher Deklaration des Handlers funktionieren und warum diese Probleme vor der Kompilierung nicht von Xcode überprüft werden)

Verwandte Themen