我有一個objectiveC類誰是我可以從javascript vai webscriptobject調用的方法。不過,我想從javascript提供可變數量的參數來調用我的函數。例如,javascript到可變參數的可可
myclass.myfunction(arg1,arg2,arg3 ....)在ObjectiveC端,函數不限於特定數量的參數。我想使用可變參數。
以前有人做過這樣的事嗎?
我有一個objectiveC類誰是我可以從javascript vai webscriptobject調用的方法。不過,我想從javascript提供可變數量的參數來調用我的函數。例如,javascript到可變參數的可可
myclass.myfunction(arg1,arg2,arg3 ....)在ObjectiveC端,函數不限於特定數量的參數。我想使用可變參數。
以前有人做過這樣的事嗎?
對於我的具體問題,我結束了在我的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;
}
- (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 – chris 2012-02-08 17:07:08
此答案中的方法不適用於JavaScript。 – 2012-02-08 17:30:58
你應該接受你自己的答案,因爲它實際上回答了這個問題:) – 2012-02-08 17:29:23