0

Mac 용 문서 기반 응용 프로그램을 작업 중입니다. 이 응용 프로그램에는 이러한 종류의 문서를 쓰고 읽는 자체 데이터 모델 및 메서드가 있습니다. 인수 "file는"MyApp를 문서의 유형 인이 비로소 작동하는 경우MAC 기반 문서 기반 응용 프로그램을 사용하여 새 문서를 만드는 데 필요한 인수를 잡아 내

open -a /Applications/MyApp.app file 

에서 명령 줄을 열고 다음을 입력 : 내가 미리 정의 된 문서와이 응용 프로그램을 시작하려면 나는 다음과 같은 방법으로 그것을 할 수 있습니다. 이제 다른 종류의 문서 (예 : 텍스트 파일 또는 기타)로 MyApp를 실행하고 싶습니다. 예를 들어 :

open -a /Applications/MyApp.app text.rtf 

delivered/committed 텍스트 파일

읽을 수 있어야하고 MyApp를에서 완전한 새 문서에 자동으로 삽입. 이제 int main(int argc, char *argv[]) 안에 text.rtf을 잡으려고합니다.

The document text.rtf could not be opened. MyApp cannot open files of this type

누군가가 아이디어가 어떻게 인수를 잡아 완전히 새로운 MyApp를 기반 문서의 일부로 가져올 수있다 않음 :하지만 다음과 같은 경고를 얻을? 어떻게 NSApplication으로 보낼 수 있습니까?

도움이 될 것입니다.

답변

2

명령 줄에서 전달되는 파일은 Paul R 언급 방법과 같이 응용 프로그램을 직접 여는 경우에만 적용됩니다.

코코아는 응용 프로그램을 조금씩 비정상적으로 실행합니다. 바이너리가 실행되고 메시지에서 전달되는 문서를 처리해야합니다. 이는 argv 어레이에서 사용자에게 전달되지 않음을 의미합니다. 심지어 당신이 아니에요,이 어떤 파일을 받아 들일 것입니다

-(void)application:(NSApplication *)sender openFiles:(NSArray *)filenames { 
    for (NSString *file in filenames) { 
     NSLog(@"%@", file); 
    } 
    [NSApp replyToOpenOrPrint:NSApplicationDelegateReplySuccess]; 
} 

: 제대로 모든 파일 형식을 받아 처리하는 경우

, 당신은 같은 앱 위임에 openFiles 처리기를 추가 할 필요가 수락하도록 등록. openFiles 처리기의 일부로 파일 내용을 냄새 맡고 표시기 메시지를 표시 할 수 있습니다.

openFiles 처리기는 문서 및 비 문서 기반 응용 프로그램 모두에서 작동합니다.

+0

그것이 '와 동일하지 않은 - (보이드)는 applicationDidFinishLaunching (NSNotification *) aNotification { NSArray를 argsPath * = [NSProcessInfo processInfo] 인수]; NSURL * url = [NSURL fileURLWithPath : [argsPath objectAtIndex : 1]]; _argFile = [파일 initWithURL : url]; }' 'NSProcessInfo'를 사용하면 모든 인수에 대한 요청을 할 수 있습니다. 그리고 이제 다른 클래스에서'@property argFile'을 사용하고 싶습니다. – 3ef9g

+0

다른 클래스에서 AppDelegate의 속성을 사용할 수 있습니까? – 3ef9g

+0

동일하지 않음 - 응용 프로그램이 NSApplication의 인수에 대상 파일을받지 못합니다. 게다가 앱이 이미 시작된 경우에는 그 앱에서 인수를 얻지 못할 수도 있습니다. for (2) 클래스의 다른 인스턴스에 속성 값을 전달해야합니다. 코드 모양을 제안하기 위해 앱 디자인을 모릅니다. – Petesh

0

나는 open을 사용하지 않고이 응용 프로그램을 직접 실행하는 것으로 해결할 수 있다고 생각합니다.

/Applications/MyApp.app/Contents/MacOS/MyApp text.rtf 

최소한 argv[1] = "text.rtf"을 제공해야합니다.