Consider this:
@protocol FooExport <JSExport>
- (void)method1:(NSString *)param1;
- (void)method2:(NSString *)param1 param2:(NSString *)param2;
@end
@interface Foo : NSObject <FooExport>
@end
@implementation Foo
- (void)method1:(NSString *)param1 {
NSLog(@"method1");
}
- (void)method2:(NSString *)param1 param2:(NSString *)param2 {
NSLog(@"method2");
}
@end
{
sContext = [[JSContext alloc] init];
if (sContext)
{
sContext[@"foo"] = [[Foo alloc] init];
[sContext evaluateScript:@"foo.method1(\"foo\");"];
[sContext evaluateScript:@"foo.method2(\"foo\", \"bar\");"];
}
}
method1 is called just fine, but method2 is never called.
If I change method2 as follows:
@protocol FooExport <JSExport>
- (void)method1:(NSString *)param1;
- (void)method2:(NSString *)param1;
@end
method2 is now called via [sContext evaluationScript: @ "foo.method2 (\" foo \ ", \" bar \ ");" ]; (and I need to dig out the second parameter via JSContext.currentArguments).
Similarly, if I modify method2 as follows:
@protocol FooExport - (void) method1: (NSString *) param1; - (void) method2; @end
method2 is called again through [sContext evaluate Script: @ "foo.method2 (\" foo \ ", \" bar \ ");" ]; (and I have to dig both parameters through JSContext.currentArguments).
? JSContext.currentArguments , JSValues, objective-C.