2010-04-30 9 views
0

Je fais ma fonctionnalité dans un thread secondaire et une fois que j'obtiens le résultat, j'appelle la fonction qui affiche mon ViewController dans le thread principal. Mais j'obtiens l'erreur suivante:Appel d'un UIPopoverViewController sur le thread principal à partir du thread secondaire

void WebThreadLockFromAnyThread(), 0x5c6dec0: Obtention du verrou Web à partir d'un thread autre que le thread principal ou le thread Web. UIKit ne devrait pas être appelé à partir d'un thread secondaire..

J'utilise le code ci-dessous:

-(IBAction)done{  
    if([self validateRegistrationDetails]){ 
    [NSThread detachNewThreadSelector:@selector(invokeWebService) toTarget:self withObject:nil]; 
    } 
} 

-(void) invokeWebService{ 
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init]; 
    NSString *url = [NSString stringWithFormat:@"%@%@action=1&userName=%@&eMail=%@&firstName=%@&lastName=%@&mobileNo=%@",kBaseURL,kRegisterFunction,userName.text,eMail.text,firstName.text,lastName.text,mobileNo.text]; 
    [ADCUtilities performSelectorOnMainThread:@selector(updateText:) withObject:@"Registering... "waitUntilDone:NO]; 
    [ADCUtilities performSelectorOnMainThread:@selector(showIndicator:) withObject:self.view waitUntilDone:NO]; 
    NSDictionary *tempDict = [webService makeAPICall:url]; 
    [NSThread sleepForTimeInterval:3]; 
    if(tempDict!=nil){ 
    NSString *tempLoginSuccess = [tempDict valueForKey:kLoginStatus] ; 
    if([tempLoginSuccess isEqual:@"LoginSuccess"]){ 
     [ADCUtilities displayAlertView:NSLocalizedString(@"REG_SUCCESS",@"")]; 
     [self performSelectorOnMainThread:@selector(popViewController) withObject:nil waitUntilDone:NO]; 
    } else { 
     [ADCUtilities performSelectorOnMainThread:@selector(dismissIndicator) withObject:nil waitUntilDone:NO]; 
     [ADCUtilities displayAlertView:NSLocalizedString(@"REG_FAILED",@"")]; 
    } 
    } else { 
     [ADCUtilities performSelectorOnMainThread:@selector(dismissIndicator) withObject:nil waitUntilDone:NO]; 
     [ADCUtilities displayAlertView:NSLocalizedString(@"REG_FAILED",@"")];  
    } 
    [pool release]; 
} 

-(void)popViewController{  
    [self.navigationController popViewControllerAnimated:YES];  
} 

Répondre

3

Je pense que votre problème est en fait [ADCUtilities displayAlertView:NSLocalizedString(@"REG_SUCCESS",@"")], que je suppose affiche une sorte de UIAlertView. Vous ne devriez jamais accéder à des classes UIKit à l'exception du thread principal.

+0

Bonjour Eman, C'était le problème. Merci pour la solution. Désolé, je ne pouvais pas répondre au plus tôt. – Krishnan