gpt4 book ai didi

objective-c - NSTask 终止处理程序仅在我发送 waitUntilExit 时运行

转载 作者:行者123 更新时间:2023-12-03 16:28:41 29 4
gpt4 key购买 nike

我有一个类,它会遍历 OSX 上给定文件夹的所有子文件夹,并针对找到的每个文件夹向其委托(delegate)发送一条消息。

对于找到的每个文件夹,我想运行一个 NSTask。到目前为止,一切都很好。当我为 NSTask 指定 terminationHandler 时,我遇到了问题。

这是代码:

-(void)crawler:(FTCFileSystemCrawler *)aCrawler
didFindFolder:(NSURL *)aURL
withName:(NSString *)aFileName
stop:(BOOL *)stop{

NSTask *task = [NSTask new];
task.launchPath = @"/usr/bin/say";
task.arguments = @[aFileName];
task.terminationHandler = ^(NSTask *aTask){
NSLog(@"Terminating!");
[self.tasks removeObject:aTask];

};
[self.tasks addObject:task];

[task launch];
//[task waitUntilExit];


}

这工作正常,在将 launch 发送到 NSTask 后,我发送 waitUntilExit。如果我不这样做,终止处理程序将永远不会运行。

我做错了什么?

PS 请记住,这只是一个简单的示例。我实际上用它来识别 git 存储库并运行命令。

最佳答案

尽管使用了 task.terminationHandler = ^(NSTask *aTask),您是否尝试过类似的操作,问题可能是在该 block 内使用,而该 block 未正确处理。

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(taskDidTerminate:)
name:NSTaskDidTerminateNotification
object:nil];

关于objective-c - NSTask 终止处理程序仅在我发送 waitUntilExit 时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19166165/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com