2013-02-26 4 views
1

У меня есть IBAction, и это выглядит так.Остановить выполнение до выполнения предыдущего метода?

- (IBAction) onPressed: (id) sender { 

    [self openMyDelegateToSeeIfIAmReady]; 

    if (AmIReady == YES) 
    { 
     [self doMyWork]; 
    } 
} 

Прямо сейчас, это не работает. AmIReady является логическим и изменяется на YES в openMyDelegateToSeeIfIAmReady. Дело в том, прежде, чем AmIReady становится YES, этот кусок кода

if (AmIReady == YES) 
{ 
    [self doMyWork]; 
} 

вызывается и doMyWork никогда не будет вызван. Как я могу сделать этот метод до тех пор, пока он не закончит [self openMyDelegateToSeeIfIAmReady]?

EDIT:

Вот что я имею в openMyDelegateToSeeIfIAmReady

- (void) openMyDelegateToSeeIfIAmReady 
{ 
    MyViewController *mvc = [[MyViewController alloc]initWithNibName:@"MyViewController" bundle:nil]; 
    mvc.delegate = self; 

    [self presentModalViewController:mvc animated:YES]; 
    [mvc release]; 
    amIReady = YES; 
} 

Также в этом делегат (MyViewCrontroller), она требует ввода пользователя. Если введен пользовательский ввод, мне нужно запустить doMyWork.

+1

Это уже действительно ждать. – trojanfoe

+1

, если вы не используете этот метод в другом потоке, тогда эта функция завершит работу до того, как она вернется в оператор if – Fonix

+3

, он должен ждать; в любом случае, можете ли вы опубликовать код для 'openMyDelegateToSeeIfIAmReady'? – viral

ответ

0

Если вы хотите, чтобы какой-либо код запускался после того, как был представлен ваш контроллер модального представления, используйте -[ UIViewController presentViewController:animated:completion:] и передайте блок аргументу «завершения».

(Этот метод является заменой для presentModalViewController:animated:)

Изменить код:

-(IBAction)onPressed:(id)sender 
{ 
    MyViewController * controller = [ [ MyViewController alloc ] initWithNibName:@"MyViewController" bundle:nil ]; 
    controller.delegate = self; 
    [ self presentViewController:controller animated:YES completion:^{ 
     [ self doMyWork ] ; 
    }] 
} 
+0

Очень близко. Я действительно пытаюсь запустить 'doMyWork' после того, как мой контроллер модального представления был' viewWillDisappear: 'ed, а не' viewWillAppear: 'ed – Rocky

+0

, тогда вам нужно, чтобы ваш контроллер представления модели отправил сообщение вашему делегату после его отклонения. .. – nielsbot

+0

@nielshot Да спасибо. Сейчас все работает отлично. – Rocky