2009-09-28 6 views
0

Je possède ce code:Xcode NSRunningApplication Terminate

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)]; 

qui est supposé fermer toutes les applications en cours d'exécution à partir juste le nom qui est: appName (NSString).

Lorsque je débogue l'application et que j'entre le nom de l'application dans le NSTextField pointant vers appName, elle ferme mon application à la place de l'autre application que je souhaite terminer. J'ai répondu à cette question sur un autre post mais personne ne répond alors j'ai pensé que je pourrais peut-être obtenir une réponse si je commence un nouveau post ... merci. (CECI EST DUPLICATE, juste que les gens ne répondent pas quand je réponds bakc ...)

Merci.,

Kevin

+0

pouvez-vous reformater la section de code en tant que code? – nall

+0

Oups, je ne savais pas que ce n'était pas lisible .. – lab12

Répondre

1

Vérifiez le Bundle Identifiant de votre application dans Info. plist de votre projet et assurez-vous que c'est unique.

De même, vous devez déterminer la valeur de selectedApps que vous transmettez en tant qu'argument. Pour ce faire, soit l'enregistrer:

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

ou (ce qui est suggéré dans les commentaires de Jon Hess), créer un point d'arrêt. Vous pouvez le faire de plusieurs façons:

Une fois que vous avez défini la point d'arrêt, choisissez Exécuter-> Déboguer. Cela va exécuter votre programme dans le débogueur (gdb). Faites ce que vous faites normalement pour arriver au point d'échec. Cependant, cette fois au lieu de terminer n'importe quoi, il s'arrêtera à la ligne que vous avez spécifiée. À ce stade, vous pouvez examiner vos variables. Vous pouvez imprimer des instances d'objectif-c en émettant une commande 'po' (objet d'impression). Ainsi, vous pourriez vous retrouver avec quelque chose comme:

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

Plutôt que d'utiliser une instruction de journal, vous devriez plutôt prendre le temps de comprendre comment utiliser le débogueur. Une méthode consiste à placer un point d'arrêt sur la ligne "[selectedApps makeObjectsPerformSelector: @selector (terminate)]", puis tapez "po selectedApps" dans la console du débogueur. –

+0

D'accord, je ne sais vraiment pas ce qui ne va pas ... – lab12

+0

Pourriez-vous donner plus d'informations? Quel est l'identifiant de votre bundle? Quelle était la valeur de selectedApps avant la fin de l'appel? – nall

0

Et vous ne tapez pas le nom de votre application, n'est-ce pas?

+0

Non, je suis en train de mettre dans l'autre application que je veux fermer. – lab12