我試圖找出一種方法來執行一些JavaScript,並通過完成塊返回結果,但由於某種原因,回調從不觸發。JavasScriptCore異步回調
+ (void)doSomethingWithCompletionHandler:(void (^)(NSError* error, NSString *result))completionHandler;
{
JSContext __block *context;
context = [[MyJSContext alloc] initWithVirtualMachine:[[JSVirtualMachine alloc] init]];
context[@"done"] = (id) ^(NSString *result)
{
context = nil;
completionHandler(nil, result);
};
// this works
// [context evaluateScript:@"(function(){ done('immediate'); })()"];
// this does not
[context evaluateScript:@"(function(){ setTimeout(function(){ done('delayed'); }, 1000); })()"];
}
只要我嘗試使用異步,在此使用超時進行模擬,上下文[@「done」]中的塊永遠不會被調用。
我已經擴展了JSContext以確保它在超出作用域時不會被釋放(因此__black破解)。
我接近這個錯誤的方式嗎?