2013-12-04 2 views
0

Я пытаюсь запустить задачу в новой очереди, а затем, когда эта задача завершена, чтобы сообщить 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:.

Экран просто замораживается. Есть идеи?

ответ

0

Наконец, кажется, что проблема была Конде внутри:

// Здесь задача, которую я хочу работать в новой очереди

Все мои тест-драйв, чтобы я думаю, что проблема есть:

[self.drawingView drawViewHierarchyInRect:viewPrintBase.bounds afterScreenUpdates:YES]; 

Извините за не писать весь код: S

спасибо!

Смежные вопросы