【发布时间】:2014-02-11 03:49:19
【问题描述】:
我想在 JavascriptCore 上下文中定义一个函数,它接受可变数量的参数。
类似这样的:
JSVirtualMachine* virtualMachine = [[JSVirtualMachine alloc] init];
JSContext* ctx = [[JSContext alloc] initWithVirtualMachine:virtualMachine];
ctx[@"func"] = ^(JSValue* value, ...){
va_list args;
va_start(args, value);
for (JSValue *arg = value; arg != nil; arg = va_arg(args, JSValue*)) {
NSLog( @"%@", arg);
}
va_end(args);
};
[ctx evaluateScript:@"func('arg1', 'arg2');"];
我相信 JSC 包装器不会将第二个参数传递给块,因为在记录第一个参数后迭代 va_list 会崩溃。
我也尝试了NSArray* 约定,它不起作用。
这有可能吗?
【问题讨论】:
-
我在定义一个需要多个参数的 Objective-C 控制台日志处理程序时也尝试过这样做,但即使使用 NSLogv 也无法实现。一种混乱的方法 - 您可以尝试通过 JSON 将 args 序列化为单个 arg,然后将其解压缩到您的 Objective-C 处理程序中。
-
是的,这将是最后的手段。实际上有一种方法可以使用常规的 C API,使用
JSObjectMakeFunctionWithCallback,但我想离开那个 C 接口,以便 ARC 可以处理 JS Value 的内存。
标签: iphone ios7 objective-c-blocks javascriptcore