javascript到cocoa与变量args

时间:2012-01-30 22:25:12

标签: javascript cocoa webview

我有一个objectiveC类,我可以从javascript vai webscriptobject调用我的方法。但是,我想从javascript调用我的函数提供可变数量的参数。例如,

myclass.myfunction(arg1,arg2,arg3 ....)其中,在objectiveC方面,该函数不限于特定数量的参数。我想要使​​用varargs。

之前有人这样做过吗?

2 个答案:

答案 0 :(得分:1)

- (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];
}

我希望这会有所帮助。

答案 1 :(得分:1)

对于我的具体问题,我最终在我的scriptobject中实现了以下内容。它允许我与函数名称进行字符串比较并使用传入的数组。理想情况下应该对数组中的参数进行一些类型检查...

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