gpt4 book ai didi

JavaScriptCore:尝试将 JS 函数作为 block 传递给 Objective-C,出现 'TypeError' 异常

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:00 26 4
gpt4 key购买 nike

我一直在研究新的 iOS 7/Mavericks JavascriptCore 桥接器,试图将 Objective-C 上的 JS 函数作为 block 获取。

JavascriptCore 头文件指出,只要支持每个参数,这是可能的,但尝试这样做:

JSContext *context = [[JSContext alloc] init];

context[@"Log"] = ^(NSString *message){NSLog(@"%@", message);};

context[@"BlockTest"] = ^(void (^blockTest)(NSString* blockString)){
NSLog(@"Calling Block Test");
blockTest(@"STRINGGGGG");
};

[context evaluateScript:@"BlockTest( function(dataString){Log('JS '+dataString);} )"];

引发以下 JS 异常:

TypeError: '[object NSBlock]' is not a function (evaluating 'BlockTest( function(dataString){Log('JS '+dataString);} )')

对我的测试代码有什么问题有什么想法吗?

最佳答案

我知道你已经接受了这个支持被移除的答案(这是一个老问题),但是你可以在 iOS7 引入的 JavaScriptCore 框架中将 JS 函数作为一个 block 传递给 Objective-C/Mavericks - 你的代码只需要稍微改变你声明和调用 block 的方式:

JSContext *context = [[JSContext alloc] init];

context[@"Log"] = ^(NSString *message){NSLog(@"%@", message);};

context[@"BlockTest"] = ^(JSValue *blockTest){
NSLog(@"Calling Block Test");
[blockTest callWithArguments:@[@"STRINGGGGG"]];
};

[context evaluateScript:@"BlockTest( function(dataString){Log('JS '+dataString);} )"];

关于JavaScriptCore:尝试将 JS 函数作为 block 传递给 Objective-C,出现 'TypeError' 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19423425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com