JavaScript для какао с переменными аргументами - PullRequest
4 голосов
/ 31 января 2012

У меня есть классjective C, методы которого я могу вызвать из javascript vai webscriptobject.Тем не менее, я хотел бы вызвать мою функцию из JavaScript, предоставляя переменное количество параметров.Например,

myclass.myfunction (arg1, arg2, arg3 ....), где на сторонеjectiveC функция не ограничена определенным количеством аргументов.Я думаю, как использовать varargs.

Кто-нибудь делает что-то подобное раньше?

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Что касается моей конкретной проблемы, то я реализовал следующее в моем скриптовом объекте. Это позволяет мне сравнивать строки с именем функции и использовать переданный массив. В идеале следует выполнить некоторую проверку типов аргументов в массиве ...

(id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args
{
//NSLog(@" debug WABridge invokeUndefinedMethodFromWebScrip dump name: %@", name);
//NSLog(@" debug WABridge invokeUndefinedMethodFromWebScript args:  %@", args);

if ([name isEqualToString:@"javascriptToCWithArgs"]) 
{

    std::vector<std::wstring> dataArray;
    dataArray.reserve([args count]);

    for (id object in args) {
        std::wstring valAsWstring = NSStringToStringW(object);
        //place into vector
        dataArray.push_back(valAsWstring);
    }

            //callback into my code
    if (m_pWebView!= nil)
    {
        m_pWebView->m_pObjectiveCWebViewWrapper->getWebViewListener()->onMessageFromPageWithArgs(dataArray);
    }

}
else 
{
    NSLog(@"Bridge undefined/unsupported function");
}



return nil;
}
1 голос
/ 31 января 2012
- (NSNumber *) addValues:(int) count, ... {
    va_list args;
    va_start(args, count);

    NSNumber *value;

    double retval;

    for( int i = 0; i < count; i++ ) {
    value = va_arg(args, NSNumber *);

    retval += [value doubleValue];

    }

    va_end(args);
    return [NSNumber numberWithDouble:retval];
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...