Рефлексивно вызывая методы с помощью аргументов блока - PullRequest
0 голосов
/ 25 августа 2011

Я работаю над уровнем абстракции для выполнения вызовов из JavaScript в UIWebView в нативную часть моего приложения.

Для этого мне требуется общий механизм, который переводит вызов функции JavaScript в сообщение Objective-C для объекта. Это уже работает довольно хорошо, за исключением вызова методов для объектов Objective-C, которые требуют Block-Arguments.

Как мне вызывать такие методы в общем виде, не передавая NULL в качестве аргумента блока. Я хотел бы передать общий блок, который затем может перебирать все переданные ему аргументы (переменные аргументы).

Перефразируя: есть ли какой-нибудь способ для общего вызова любых методов с Block-Parameters, несмотря на конкретные типы этих блоков (то есть различия в сигнатурах), чтобы я мог захватывать аргументы, передаваемые в эти блоки, когда они впоследствии выполняются?

1 Ответ

0 голосов
/ 25 августа 2011

Я не пытался точно, что вы делаете, но я думаю, что знаю достаточно, чтобы сказать, к сожалению, "нет".

Здесь вас объединяет пара проблем:

  • Блоки - это просто блоки, и не существует стандартного способа получить указатель на функцию из блока (это можно сделать, но не переносимым способом или способом, ориентированным на будущее).
  • Даже если у вас был указатель на функцию, вы не могли бы вызвать его с количеством аргументов, определенных во время выполнения, без использования специфичной для платформы сборки. C поддерживает только это va_args.

(Надеюсь, я ошибаюсь, и что кто-то меня поправит, но боюсь, что нет.)

...