【问题标题】:javascript to cocoa with variable args带有可变参数的 javascript 到可可
【发布时间】:2012-02-22 17:03:56
【问题描述】:

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

myclass.myfunction(arg1, arg2, arg3 ....) 在objectiveC端,函数不限于特定数量的参数。我想像使用可变参数。

以前有人做过这样的事吗?

【问题讨论】:

    标签: javascript cocoa webview


    【解决方案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];
    }
    

    我希望这会有所帮助。

    【讨论】:

    • 谢谢,这可以作为通用函数正常工作。我最终通过实现以下解决了我的具体问题: - (id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args
    • 这个答案中的方法不能从 JavaScript 中使用。
    【解决方案2】:

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

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

    【讨论】:

    • 你应该接受你自己的答案,因为它实际上回答了这个问题:)
    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    相关资源
    最近更新 更多