从我的Cocoa代码终止一个应用程序

时间:2012-07-21 17:00:12

标签: objective-c cocoa osx-leopard

我必须以编程方式从我的Cocoa代码中终止(而非强制)应用程序。

实际上,这就是它的样子:

-(BOOL) terminateAppWithBundle:(NSString*)bundle {
    NSArray* array = [NSRunningApplication runningApplicationsWithBundleIdentifier:bundle];
    if ([array count] > 0){        
        NSRunningApplication* app = (NSRunningApplication*)[array objectAtIndex:0];
        [array makeObjectsPerformSelector:@selector(terminate)];
        float time = 0;
        while (!app.isTerminated){
            [NSThread sleepForTimeInterval:0.2];
            time += 0.2;
            if (time >= 15){
                return NO;
            }
        }
    }
    return YES;
}

它运作良好......但仅限于雪豹和狮子 在Leopard(我想支持)上,应用程序在启动时崩溃并显示以下错误信息:

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread:  0

Dyld Error Message:
  Symbol not found: _OBJC_CLASS_$_NSRunningApplication


我想这是因为NSRunningApplication不是10.5 SDK的一部分......如果不使用该类,我怎么能这样做呢?

1 个答案:

答案 0 :(得分:0)

我自己用AppleScript解决:

-(BOOL) terminateiTunes {
    NSAppleScript *closeiTunes = [[NSAppleScript alloc] initWithSource:@"tell application \"iTunes\" to quit"];
    [closeXcode executeAndReturnError:nil];
    return YES;
}