Objective c NSTask不接收Xcode 4.3.3之外的标准输出
这是我的第一篇帖子,所以让我向所有的发帖人表示感谢 在外面(我被动地大量使用——太棒了!) 我正在为MacOSX开发一个视频导出工具,它使用了很好的Quicktime API 简介: 我从多个输入电影中剪切帧,并将其排列(缩放)到新的输出 电影(一种媒体亭) 许多所需的QT功能(如编写时间码…)都需要 嵌套在32位应用程序中,我决定使用32位命令行脱机执行此操作 工具。该工具逐帧渲染(脱机)并打印当前进度 值介于0.0和1.0之间 它由主应用程序(Cocoa、GUI、现代的东西)通过 NSTask。粗壮的人被一根管子抓住了 我看了一些示例,并将快速概述我的代码:Objective c NSTask不接收Xcode 4.3.3之外的标准输出,objective-c,xcode,stdout,nstask,nspipe,Objective C,Xcode,Stdout,Nstask,Nspipe,这是我的第一篇帖子,所以让我向所有的发帖人表示感谢 在外面(我被动地大量使用——太棒了!) 我正在为MacOSX开发一个视频导出工具,它使用了很好的Quicktime API 简介: 我从多个输入电影中剪切帧,并将其排列(缩放)到新的输出 电影(一种媒体亭) 许多所需的QT功能(如编写时间码…)都需要 嵌套在32位应用程序中,我决定使用32位命令行脱机执行此操作 工具。该工具逐帧渲染(脱机)并打印当前进度 值介于0.0和1.0之间 它由主应用程序(Cocoa、GUI、现代的东西)通过 NSTas
NSTask *task;
NSPipe *pipe;
float progress;
// prepare the offline process
//
//
-(void) prepareOfflineExport {
task = [[NSTask alloc] init];
pipe = [[NSPipe alloc] init];
[task setLaunchPath:pathToRenderer];
[task setStandardOutput:pipe];
}
// arguments are passed outside
// invoke the process
//
-(void) startOfflineExport {
progress = 0.0f;
NSArray *argv = [NSArray arrayWithObjects: /* command line args */, nil];
[task setArguments:argv];
NSFileHandle *fh = [pipe fileHandleForReading];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataReady:) name:NSFileHandleReadCompletionNotification object:fh];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskTerminated:) name:NSTaskDidTerminateNotification object:task];
[task launch];
[fh readInBackgroundAndNotify];
}
// called when data ready
//
//
-(void) dataReady:(NSNotification*)n {
NSData *d = [[n userInfo] valueForKey:NSFileHandleNotificationData];
if([d length]) {
NSString *s = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding];
progress = [s floatValue];
}
}
// called when process exits
//
//
-(void) taskTerminated:(NSNotification*)n {
task = nil;
progress = 1.0f;
}
现在的问题是:
在Xcode内部启动应用程序时(通过“运行”),一切正常。
调用正确完成,流程在活动监视器中可见,并且
NSLevelIndicator(在创新应用程序的guy上)按照
(浮动)进度变量
但是:如果我“归档”应用程序并在Xcode之外执行它,那么
命令行工具似乎从未到达应用程序。我试着写一个调试文件
在
没有机会,从来没有人叫它!我在几台Mac电脑上测试了这个问题,同样的问题
我是否犯了一个明显的错误,或者是否有一些需要配置的首选项(沙箱已关闭),
也许是我忽略的已知问题
谢谢你的帮助
问候
Mat同样的事情也发生在我身上
-(void) dataReady:(NSNotification*)n