2009-09-28 5 views
0

나는이 코드를 가지고 종료 : 프로그램 응용 (있는 NSString) : 그냥 이름에서 실행중인 모든 응용 프로그램을 종료한다고 가정한다엑스 코드 NSRunningApplication이

NSWorkspace *sharedWorkspace = [NSWorkspace sharedWorkspace]; 
NSString *appPath = [sharedWorkspace fullPathForApplication:appName]; 
NSString *identifier = [[NSBundle bundleWithPath:appPath] bundleIdentifier]; 
NSArray *selectedApps = 
    [NSRunningApplication runningApplicationsWithBundleIdentifier:identifier]; 
// quit all 
[selectedApps makeObjectsPerformSelector:@selector(terminate)]; 

.

app을 디버깅하고 appName을 가리키는 NSTextField에 응용 프로그램 이름을 입력하면 종료하려는 다른 응용 프로그램 대신 응용 프로그램이 닫힙니다. 나는이 질문에 대해 다른 게시물에 답했지만 누구도 반응을 보이지 않아 새로운 게시물을 시작하면 응답을받을 수 있다고 생각했습니다 ... 감사합니다. (이건 ... 그 내가 회신 할 때 사람들이 응답하지 않는 그냥 bakc, 중복되지 않음)

감사합니다.,

케빈

+0

코드 섹션을 코드로 다시 포맷 할 수 있습니까? – nall

+0

Oooops, 나는 그것이 읽을 수 없다는 것을 깨닫지 못했습니다 .. – lab12

답변

1

이 정보에서 앱의 번들 식별자를 확인합니다. 귀하의 프로젝트 plist하고 독특한 있는지 확인하십시오.

또한 실제로 전달하는 selectedApps 값을 결정해야합니다. , 중단 점을 만들

NSLog(@"selectedApps: %@", selectedApps); 

또는 (그리고 이것은 존 헤스로 의견 제안) 이렇게하려면를 기록 중. 당신이 몇 가지 방법으로 수행 할 수 있습니다 당신이 설정 한 후

(이 링크는 활성화 된 중단 점을 보여줍니다) 실행 -> 디버그를 선택하십시오. 그러면 디버거 (gdb)에서 프로그램이 실행됩니다. 실패 지점에 도달하기 위해 일반적으로하는 일을하십시오. 그러나 이번에는 아무 것도 종료하지 않고 지정한 줄에서 멈 춥니 다. 이 시점에서 변수를 검사 할 수 있습니다. 'po'(인쇄 객체) 명령을 실행하여 objective-c 인스턴스를 인쇄 할 수 있습니다. 따라서 다음과 같이 끝낼 수도 있습니다.

(gdb)po appPath 
    // gdb will print this 
(gdb)po identifier 
    // gdb will print this 
(gdb)po selectedApps 
    // gdb will print this 
+2

대신 로그 문을 사용하는 대신 디버거 사용 방법을 이해해야합니다. 한 가지 방법은 "[selectedApps makeObjectsPerformSelector : @selector (terminate)]"줄에 중단 점을 넣은 다음 디버거 콘솔에 "po selectedApps"를 입력하는 것입니다. –

+0

그래, 내가 뭘 잘못하고 있는지 정말로 모르겠다 ... – lab12

+0

정보 더 줄 수 있니? 묶음 식별기 란 무엇입니까? 호출 종료 전에 selectedApps의 가치는 무엇 이었습니까? – nall

0

그리고 앱의 이름을 입력하지 않았습니까?

+0

아니요, 닫고 싶은 다른 응용 프로그램을 넣을 것입니다. – lab12