Objective c NSTask不接收Xcode 4.3.3之外的标准输出

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

这是我的第一篇帖子,所以让我向所有的发帖人表示感谢 在外面(我被动地大量使用——太棒了!)

我正在为MacOSX开发一个视频导出工具,它使用了很好的Quicktime API

简介: 我从多个输入电影中剪切帧,并将其排列(缩放)到新的输出 电影(一种媒体亭)

许多所需的QT功能(如编写时间码…)都需要 嵌套在32位应用程序中,我决定使用32位命令行脱机执行此操作 工具。该工具逐帧渲染(脱机)并打印当前进度 值介于0.0和1.0之间

它由主应用程序(Cocoa、GUI、现代的东西)通过 NSTask。粗壮的人被一根管子抓住了

我看了一些示例,并将快速概述我的代码:

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