【问题标题】:Xcode NSRunningApplication TerminateXcode NSRunningApplication 终止
【发布时间】:2012-04-20 13:02:22
【问题描述】:

我有这个代码:

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

假设关闭任何从名称运行的应用程序:appName (NSString)。

当我调试应用程序并在指向 appName 的 NSTextField 中输入应用程序名称时,它会关闭我的应用程序,而不是我希望它终止的其他应用程序。我在另一个帖子上回答了这个问题,但没有人回复,所以我想如果我开始新帖子,也许我可以得到回复......谢谢。 (这不是重复的,只是当我回复 bakc 时人们没有回应......)

谢谢,

凯文

【问题讨论】:

  • 您可以将代码部分重新格式化为代码吗?
  • 哎呀,我没有意识到那不可读..

标签: objective-c cocoa terminate


【解决方案1】:

在项目的 Info.plist 中检查应用的 Bundle Identifier,并确保它是唯一的。

此外,您应该确定您实际作为参数传递的 selectedApps 的值。为此,请记录它:

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

或者(这是 Jon Hess 在 cmets 中建议的),创建一个断点。您可以通过以下几种方式做到这一点:

设置断点后,选择“运行”->“调试”。这将在调试器 (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

【讨论】:

  • 与其使用日志语句,不如花时间了解如何使用调试器。一种方法是在“[selectedApps makeObjectsPerformSelector:@selector(terminate)]”行放置一个断点,然后在调试器控制台中键入“po selectedApps”。
  • 您能提供更多信息吗?你的捆绑标识符是什么?在调用终止之前 selectedApps 的值是多少?
  • 好的,我可以从我的信息列表中为您提供捆绑标识符:com.cityconnection.${Helios:rfc1034identifier} 我不确定 selectedApps。我一开始并没有给它增加价值。我在上面的代码中调用了变量 selectedapps...
  • Kevin:用调试器打印出来。
  • 实际上,我得到““APP NAME”的调试正常结束”它实际上应该终止另一个正在运行的应用程序......
猜你喜欢
  • 2010-12-01
  • 1970-01-01
  • 2011-07-24
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 2018-01-12
相关资源
最近更新 更多