2012-08-30 4 views
1

내 응용 프로그램 내에서 일부 줄의 applescript 코드를 실행하고 싶습니다. 표준적인 방법은 NSAppleScript 클래스를 사용하는 것입니다. 그러나이 코드는 완료하는 데 몇 분이 걸릴 수 있으므로 별도의 스레드를 사용해야하거나 인터페이스가 중지됩니다. 큰 문제는 here으로 NSAppleScript 클래스는 메인 스레드에서만 실행될 수 있습니다.NSAppleScript 및 응답하지 않는 인터페이스 - Objective-C

그래서 별도의 스레드에서 코드를 실행하면 앱이 다운됩니다. 주 스레드에서 실행하면 중지됩니다. 어떤 아이디어?

또한 NSTask와 osascript 명령을 사용하는 것을 고려했지만 osascript가 대화 상자와 같은 사용자 입력을 지원하지 않는 어딘가 (링크를 찾을 수 없음)를 보았습니다. 사실인지 확실하지 않지만 오스카 스크립트가 해결책이 아닙니다.

+1

그냥 제안,하지만 어쩌면 osascript''와'NSTask'를 사용하려고 ? – TheAmateurProgrammer

+1

당신이 애플 스크립트로 무엇을하려고하는지 조금 더 많은 정보가 도움이 될 것입니다. – rdelmar

+0

@theAmateurProgrammer는 osascript -e '대화 상자 "Hello"를 표시하려고 시도했습니다. 작동하지 않습니다.이 오류가 있습니다. 0:43 : 실행 오류 : 사용자 조작이 허용되지 않았습니다. (-1713) – Alex

답변

0

그래서 NSTask를 통해 시작된이 도우미를 작성했습니다. 실행 프로그램

:

NSArray* args = [NSArray arrayWithObject: <<AS code here>>]; 

task = [NSTask new]; 
[task setLaunchPath: [[NSBundle mainBundle] pathForResource: @"ASHelper" ofType: @""]]; 
[task setArguments: args]; 
[task launch]; 

그리고 도우미 : 여기 사람이 관심 경우 코드입니다

int main(int argc, const char * argv[]) 
{ 
    @autoreleasepool { 
     NSString* source = [NSString stringWithCString: argv[1] length: strlen(argv[1])]; 
     NSAppleScript* as = [[NSAppleScript alloc] initWithSource: source]; 
     [as executeAndReturnError: nil]; 
    } 
    return 0; 
} 
관련 문제