2009-09-26 24 views
2

我將如何使用NSRunningApplication?我有一個相反的東西推出一個應用程序:NSRunningApplication - 終止

[[NSWorkspace sharedWorkspace] launchApplication:appName]; 

但我想關閉一個。我得到一個錯誤,當我調試了NSRunningApp的代碼是這樣的:

NSRunningApplication *selectedApp = appName; 
[selectedApp terminate]; 

有什麼錯嗎?如果有請指出並解決它。

+0

這實際上是這個其他問題的重複(同樣的問題:不能發送消息到錯誤類的實例):http://stackoverflow.com/questions/930929/isequaltostring-cocoa-error – 2009-09-26 15:48:17

+0

@ Peter:only解決方案是重複的,問題是獨一無二的。 – 2009-09-27 13:18:45

+0

好吧,我們可以專注於這個問題......沒有人迴應我......在GS的迴應中看看我最新的帖子! – lab12 2009-09-28 18:05:28

回答

8

您分配變量selectedApp一個NSString。字符串沒有- (void)terminate方法,因此失敗。您必須獲得指向應用程序的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)]; 
+0

好吧,對不起,如果我不明白這一點...喜歡我的代碼,從剛名打開一個應用程序,怎麼會類似這樣的工作的東西嗎?只是終止。因爲我不想將路徑添加到需要關閉的應用程序中。 – lab12 2009-09-26 15:13:37

+0

我的新示例應該完全正常運行 – 2009-09-26 16:46:29

+0

好吧,我收到此錯誤消息,NSRunningApplication可能不會響應+ runningApplicationWithBundleIdentifier – lab12 2009-09-27 12:44:38

5

appName是指什麼?如果它的字面意思是NSString那麼這是行不通的。

由於NSRunningApplication是一個類,你必須創建一個實例向它發送一個實例方法,你會與任何其他類。

有三類方法(見the docs),你可以用它來返回NSRunningApplication實例:

+ runningApplicationWithProcessIdentifier: 
+ runningApplicationsWithBundleIdentifier: 
+ currentApplication 

除非你想根據當前的應用程序,你可能會發現前兩個類方法的NSRunningApplication實例最有用。

然後,您可以將terminate消息發送到NSRunningApplication實例,該實例將嘗試退出已配置的應用程序。

+0

appname是一個NSString .. – lab12 2009-09-26 15:08:18

+0

是的,我是這樣說的話 - 你需要創建一個使用上述方法之一'NSRunningApplication'實例。 – 2009-09-26 15:20:22

+0

確定我有這個: NSString * identifier = [[NSBundle bundleWithPath:appName] bundleIdentifier]; \t \t NSRunningApplication * selectedApp = [NSRunningApplication runningApplicationWithBundleIdentifier:identifier]; \t \t [selectedApp終止]; dis仍然不起作用,... – lab12 2009-09-26 16:49:37