2012-01-30 28 views
4

我有一個objectiveC類誰是我可以從javascript vai webscriptobject調用的方法。不過,我想從javascript提供可變數量的參數來調用我的函數。例如,javascript到可變參數的可可

myclass.myfunction(arg1,arg2,arg3 ....)在ObjectiveC端,函數不限於特定數量的參數。我想使用可變參數。

以前有人做過這樣的事嗎?

回答

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; 
} 
+0

你應該接受你自己的答案,因爲它實際上回答了這個問題:) – 2012-02-08 17:29:23

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

我希望這會有所幫助。

+0

謝謝,這工作得很好,作爲一個通用函數。我最終通過實現以下內容來解決特定問題: - (id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args – chris 2012-02-08 17:07:08

+0

此答案中的方法不適用於JavaScript。 – 2012-02-08 17:30:58