2016-04-20 2 views
0

Я использую компонент WKWebView в своем приложении Mac для показа веб-страницы. Эта веб-страница отправить данные в родное приложение с помощью JavaScript позвонить webkit.messageHandlers["callbackHandlerName"].postMessage(dataObject);WKScriptMessage.body вызывает EXC_BAD_ACCESS

я могу получить большинство сообщений в моем родном приложении без проблем (а затем преобразовать их тела NSDictionary), но некоторые типы сообщений вызывает EXC_BAD_ACCESS, когда я пытаюсь для доступа к собственности message.body. Я не могу понять, почему некоторые данные не могут быть отправлены в родное приложение и другие могут (в обоих случаях данные вложенные объекты JavaScript)

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); 
    } 
} 

Есть ли какие-либо ограничения для сообщений, передаваемых в родное приложение с помощью JS postMessage позвонить?

+0

может быть, что некоторые из ваших сообщений не имеют «тела» 'возможно? Не могли бы вы проверить, было ли «тело» нулевым, прежде чем пытаться что-то с этим сделать? – pbodsk

+0

Я не могу проверить это, потому что «Значение типа« AnyObject »никогда не может быть nil». Кроме того, у моего nativeCallbackB есть пустое тело –

ответ

0

Ох! Я решить мою проблему:

Мой обработчик nativeCallbackB был объявлен как:

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

но тип WKScriptMessage.body является AnyObject

Итак, я изменил декларацию обработчика:

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

и теперь это ks (но я до сих пор не знаю, почему некоторые некоторые сообщения работают также с неправильным объявлением обработчика и почему эти проблемы не проверяются Xcode перед компиляцией)