У меня есть протокол JSExport
с именем ChannelExport
по методу - (void)sendRequest:(NSDictionary *)request withCallback:(JSValue *)callback;
. При вызове этого метода из кода Javascript работает хорошо, как это:Как передать функцию JS как свойство объекта в iOS
channel.sendRequestWithCallback({'foo': 'bar'}, function(response) { ... });
В ObjC, я могу получить доступ к значениям в request
словаре, а также вызвать функцию callback
.
Теперь я хотел бы изменить интерфейс - (void)sendRequest:(NSDictionary *)request
, передавая функцию JS как часть request
словаря, как это:
channel.sendRequestWithCallback({
'foo': 'bar'
'callback': function(response) { ... }
});
В этом случае, когда я пытаюсь вызвать функцию callback
в ObjC, приложение падает. По-видимому, объект callback
не является JSValue
, а вместо него NSDictionary
(точнее, __NSDictionaryM
). Я предполагал, что функция JS корректно завернута как JSValue
так же, как и при передаче ее в качестве простого параметра.
Любой намек на то, почему это происходит, и как решить проблему?