2013-08-27 3 views
0
-(void)method1 
     { 
      [self method2];  
      [self method3]; //After finishing execution of method2 and its delegates I want to execute method3 
     } 

Здесь метод2 запущен, когда он вызвал, но перед выполнением его методов-делегатов метод3 начал работать. Как этого избежать? Любое предложение или код пожалуйстаПодождите, пока методы делегата не закончатся в ios

я назвал NSURL связь со своими делегатами в методе 2

-(void)method2 
    { 
    .... 
     connection= [[NSURLConnection alloc] initWithRequest:req delegate:self ]; 
    .... 
    } 


    -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 

     } 

-(void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) data 
     { 

     } 
.. 
.. 

ответ

5

Использование блоков - было бы проще в обращении:

[NSURLConnection sendAsynchronousRequest:request 
            queue:[[NSOperationQueue alloc] init] 

         completionHandler:^(NSURLResponse *response, 
              NSData *data, 
              NSError *error) 
{ 

    if ([data length] >0 && error == nil) { 
     // parse your data here 

     [self method3]; 

     dispatch_async(dispatch_get_main_queue(), ^{ 

       // call method on main thread, which can be used to update UI stuffs 
       [self updateUIOnMainThread]; 
     }); 
    } 
    else if (error != nil) { 
     // show an error 
    } 
}]; 
+0

+1 для этого, если вы можете настроить таргетинг IOS 5 и выше. Просто имейте в виду, что блок «completeHandler» вызывается в фоновом потоке/очереди. –

+1

@SteveWilford - проверьте мои обновленные ans, где в блоке завершения добавлен блок для вызова метода в основном потоке. Подобно тому, как разбор выполняется и после этого требуется обновление пользовательского интерфейса, эта методология может быть использована. – Mrunal

1
-(void) connection:(NSURLConnection *) connection didReceiveData:(NSData *) 
{ 
    [self method3] 
} 
0

Вы используете Асинхронный URL подключения. То, что метод 3 запускается до завершения метода 2. Чтобы решить вашу проблему, используйте это

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [self method3]; 
} 

Это должно определенно работать.

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