Ich würde gerne eine Funktion im JavascriptCore-Kontext definieren, der eine variable Anzahl von Argumenten benötigt.Variable Argumentliste zu JavascriptCore Block
Etwas wie folgt aus:
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');"];
Ich glaube, dass die JSC-Wrapper nicht das zweite Argument der Block nicht besteht, weil auf va_list
Abstürze Iterieren nach dem ersten Argument anzumelden.
Ich versuchte auch mit der Konvention, es funktioniert nicht.
Ist das in irgendeiner Weise möglich?
Ich habe auch versucht, dies zu tun, wenn ich einen Objective-C-Konsolen-Log-Handler definiert, der mehrere Argumente akzeptiert, aber selbst mit NSLogv nicht funktioniert. Ein chaotischer Ansatz - Sie könnten versuchen, die Argumente in einem einzigen Argument über JSON zu serialisieren und dann in Ihrem Objective-C-Handler auszupacken. – Mike
Ja, das wäre ein letzter Ausweg Ansatz. Es gibt tatsächlich eine Möglichkeit, dies mit der regulären C-API zu tun, mit 'JSObjectMakeFunctionWithCallback', aber ich möchte diese C-Schnittstelle verlassen, damit ARC den Speicher von JS Value verarbeiten kann. –