Я пытаюсь запустить задачу в новой очереди, а затем, когда эта задача завершена, чтобы сообщить VC о запуске executeSegueWithIdentifier, чтобы передать следующий контроллер представления.run performSegueWithIdentifier внутри очереди
В кнопке метода у меня есть этот вызов:
- (IBAction)previewButtonTouchedIn:(id)sender
{
prepareDesign(self.imageToEdit,self.maskImageToPrint,self.drawingView,^(UIImage* imageReturn){
self.previewDesignImage = imageReturn;
[self performSegueWithIdentifier:PREVIEW_SEGUE sender:self];
});
}
и метод, названный, содержит:
void prepareDesign(UIImage *imageToEdit,UIImage *maskImageToPrint,UIView *drawingView, void (^block)(UIImage*)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Here the task which I want to run in a new queue
UIImage *imageSnapShot = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
//I have tested with dispatch_sync and dispatch_async.
dispatch_sync(dispatch_get_main_queue(), ^{ block(imageSnapShot);});
});
}
Я протестирована с
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ block(imageSnapShot);}];
вместо
dispatch_sync(dispatch_get_main_queue(), ^{ block(imageSnapShot);});
И я проверил с точкой останова, что performSegueWithIdentifier
запускается с основным потоком, устанавливающим точку останова в вызове performSegueWithIdentifier
и в prepareForSegue:sender:
.
Экран просто замораживается. Есть идеи?