Я пытаюсь выяснить способ выполнения Javascript и вернуть результат через блок завершения, но по какой-то причине обратный вызов никогда не срабатывает.JavascriptCore асинхронный обратный вызов
+ (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); })()"];
}
Как только я пытаюсь сделать это асинхронным, моделируется здесь с помощью тайм-аута, блок в контексте [@ «сделано»] никогда не вызываются.
Я расширил JSContext, чтобы удостовериться, что он не освобожден, когда он выходит из сферы действия (отсюда __black hack).
Я подхожу к этому неправильно?