2016-06-02 5 views
1

Objective-C에서 JavascriptCore를 사용하여 JS 함수를 실행하려고합니다. 여기에 JS 코드입니다 :콜백으로 JS를 실행할 때 JavascriptCore가 응답하지 않는다

var FeedParser = require('feedparser'); 
var run = function(data, options){ 
    var feedparser = new FeedParser(options); 
    feedparser.on('readable', function() { 
    if(callback){ 
     callback(this.read()); 
    } 
    }); 
    feedparser.end(data); 
}; 

module.exports = { 
    run: run 
}; 

그리고 여기에 JS를 호출하는 목표 - C 코드입니다 :

NSString *path = [[NSBundle mainBundle] pathForResource:@"rss" ofType:@"js"]; 
NSStringEncoding encoding; 
NSError *error = nil; 
NSString *js = [NSString stringWithContentsOfFile:path 
             usedEncoding:&encoding 
               error:&error]; 

JSContext *context = [[JSContext alloc] init]; 
[context setExceptionHandler:^(JSContext *context, JSValue *value) { 
     NSLog(@"%@", value); 
}]; 
context[@"callback"] = ^(JSValue *val){ 
    @try{ 
     if([val isString]){ 
      NSLog(@"%@", [val toString]); 
     } else if([val toDictionary][@"0"]){ 
      NSLog(@"%@", [val toArray]); 
     } else { 
      NSLog(@"%@", [val toDictionary]); 
     } 
    } 
    @catch(NSException *e){ 
    } 
}; 
[context evaluateScript:js]; 

JSValue *parse = context[@"rss"][@"run"]; 
[parse callWithArguments:@[data, o]]; 

참고 :

  1. 그냥 명확하게하기 위해,이 방법은 모두 잘 작동 결과를 즉시 리턴하는 다른 JS 함수. 나는 그들을 모두 단일 JS로 패키지화하기 위해 browserify를 사용하고있다. 콜백을 통해 비동기 적으로 반환되는 함수에 문제가 있음을 눈치 채고 있습니다. (내가 문맥에 callback 함수를 추가하고있다.)
  2. 나는 이것을 XCode에서 실행할 때 (응용 프로그램뿐만 아니라 XCode 편집기 자체도 멈추고 활동 모니터에서 프로세스를 죽일 때까지 복구되지 않는다.)
  3. 그러나 어떤 이유로 나는 랩톱에서 iPhone을 분리하자마자 결과를 반환합니다. (이 시점에서 XCode는 죽일 때까지 여전히 limbo 상태입니다.)
  4. 일단 Xcode에서 분리되면 앱이 정상적으로 실행됩니다. Xcode에서 실행되는 동안 실행이 중단됩니다.

답변

0

아마도 JavaScript 값을 NSDictionary로 변환하려고합니다. 사전 호출. 이 메서드는 값을 재귀 적으로 변환하려고 시도하므로 종종 매달리게됩니다. 순환 참조가있는 모든 JS 값이이 경우 무한 재귀를 발생시키는 것으로 의심됩니다. 대신 JSValue를 직접 사용해보십시오.

관련 문제