Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading NSTask遇到大数据时阻止我的UI_Multithreading_User Interface_Blocking_Nstask_Large Data - Fatal编程技术网

Multithreading NSTask遇到大数据时阻止我的UI

Multithreading NSTask遇到大数据时阻止我的UI,multithreading,user-interface,blocking,nstask,large-data,Multithreading,User Interface,Blocking,Nstask,Large Data,我想用生成nstask executionIpa期间生成的数据更新我的nstextview。但是当我运行我的代码来执行NSTASK时,在中间,我的NSTASK阻止了我的UI,但是任务继续执行。最后,当nstask终止时,我的ui开始正常工作 这是我运行nstask的代码: dispatch_queue_t taskQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); NSTask *task=[[

我想用生成nstask executionIpa期间生成的数据更新我的nstextview。但是当我运行我的代码来执行NSTASK时,在中间,我的NSTASK阻止了我的UI,但是任务继续执行。最后,当nstask终止时,我的ui开始正常工作

这是我运行nstask的代码:

dispatch_queue_t taskQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);


 NSTask *task=[[NSTask alloc]init];

dispatch_async(taskQueue, ^{

@try {



         [task setArguments:arguments];

         [task setLaunchPath: launchPath];
      [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskCompletion:)  name: NSTaskDidTerminateNotification object:task];


        // Output Handling
       NSPipe *outputPipe         = [[NSPipe alloc] init];
        outputFileHandle = [[NSFileHandle alloc]init];
        [task setStandardOutput:outputPipe];
        outputFileHandle=[outputPipe fileHandleForReading];

        [outputFileHandle waitForDataInBackgroundAndNotify];

        [[NSNotificationCenter defaultCenter] addObserverForName:NSFileHandleDataAvailableNotification object:outputFileHandle queue:nil usingBlock:^(NSNotification *notification){

            NSData *output = [outputFileHandle availableData];
            NSString *outStr = [[NSString alloc] initWithData:output encoding:NSUTF8StringEncoding];


            dispatch_sync(dispatch_get_main_queue(), ^{

                [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskCompletion:)  name: NSTaskDidTerminateNotification object:task];


                NSLog(@"%@",outStr);
                NSString *textViewData =[self.outputView string];
                self.outputView.string = [textViewData stringByAppendingString:[NSString stringWithFormat:@"\n%@", outStr]];
                // Scroll to end of outputText field
                NSRange range;
                range = NSMakeRange([self.outputView.string length], 0);
                [self.outputView scrollRangeToVisible:range];
            });


            [outputFileHandle waitForDataInBackgroundAndNotify];
        }];

        [task launch];
     [task waitUntilExit];



    }
    @catch (NSException *exception) {
        NSLog(@"Problem Running Task: %@", [exception description]);
    }
    @finally {
                    NSLog(@"i m in finally xbuild");
               }
});
我真的很坚持。你的建议对我会有帮助的