일부 자바를 실행하고 결과를 완료 블록을 통해 반환하는 방법을 알아 내려고했지만 어떤 이유로 콜백이 실행되지 않습니다.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); })()"];
}
은 최대한 빨리 타임 아웃을 사용하여 여기 시뮬레이션, 비동기를 만들기 위해 시도로, 문맥의 블록은 [ "완료"@] 호출되지 않습니다.
JSContext가 범위를 벗어날 때 할당 해제되지 않도록 JSContext를 확장했습니다 (따라서 __black 해킹).
내가 잘못 접근하고 있습니까?