2012-06-26 19 views
5

Tengo un problema con la forma de cerrar la sesión de "TabBarViewController" a "UIViewController". En primer lugar estoy iniciando sesión (usando el servicio web SOAP + análisis XML) desde la página UIViewController. Si el ID de usuario y la Contraseña son correctos, se genera 'Token de acceso' en la base de datos (y se recogen en variables usando XML en nuestra página) y TabBarViewController cargado (página de perfil de usuario). Ahora, después de iniciar sesión, quiero "LogOut". En la página de perfil, coloqué un botón llamado "Cerrar sesión".Cierre de sesión de TabBarViewController a UIViewController usando AccessToken

Ahora aquí, necesito su ayuda para iniciar sesión usando 'Token de acceso' (que se genera durante el registro exitoso) Para que vuelva a la página de inicio de sesión agian ?????

A continuación se muestra el código se ejecuta cuando se presiona el botón "Iniciar sesión" después de introducir "ID de usuario" y "contraseña" en UITextField:

-(IBAction)Login{ 

    txtuser.text = @"test"; 
    txtpwd.text = @"test"; 

    if([txtuser.text isEqualToString:@"" ]|| [txtpwd.text isEqualToString:@""]) 
    { 
     UIAlertView *myAlert = [[UIAlertView alloc] 
           initWithTitle:nil message:@"Please fill all fields" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [myAlert show]; 
     [myAlert release]; 
    } 
    else 
    { 

    md5 =[txtpwd text]; 

    //Calling MD5 Method to Convert password into "hashcode"(Hexadecimal) formate 
    md5 = [md5 MD5]; 

    NSLog(@"%@",md5); 
    itmselected =FALSE; 

// llamar al método de servicio Web

NSString *soapmessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" 
          "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" 
          "<soap:Body>\n" 
          "<Login xmlns=\"http://boleapp.com/\">\n" 
          "<UserName>%@</UserName>\n" 
          "<PassHash>%@</PassHash>\n" 
          "</Login>\n" 
          " </soap:Body>\n" 
          " </soap:Envelope>\n",[txtuser text],md5]; 
    NSLog(@"%@",soapmessage); 
    NSURL *url = [NSURL URLWithString:@"http://weibotest.dotnetgeekz.com/servicemain.asmx"]; 
    NSMutableURLRequest *req = [[NSMutableURLRequest alloc]initWithURL:url]; 

    NSString *msglength = [NSString stringWithFormat:@"%d",[soapmessage length]]; 
    [req addValue:@" text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
    [req addValue:@"http://boleapp.com/Login" forHTTPHeaderField:@"SOAPAction"]; 
    [req addValue:msglength forHTTPHeaderField:@"Content-Length"]; 
    [req setHTTPMethod:@"POST"]; 
    [req setHTTPBody:[soapmessage dataUsingEncoding:NSUTF8StringEncoding]]; 
    [NSURLConnection connectionWithRequest:req delegate:self]; 
    webadata = [[NSMutableData alloc]init]; 
    [txtuser resignFirstResponder]; 
    [txtpwd resignFirstResponder]; 
    } 
} 

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 
    [webadata appendData:data];  
} 

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ 
    NSLog(@"error"); 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
    xmlparser = [[NSXMLParser alloc]initWithData:webadata]; 
    [xmlparser setDelegate:self]; 
    [xmlparser parse]; 
} 

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 


    if([elementName isEqualToString:@"Login"]) 

     soapresult = [[NSMutableString alloc]init]; 
    itmselected = YES; 

} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
    if(itmselected){ 
     NSLog(@"Bool value and Access Token Number and UserID= %@",string); 

     if([string isEqualToString:@"false"]){ 
      [invaliduser setImage:[UIImage imageNamed:@"invalid_username.png"]]; 

     } 
     else{ 
     NSArray* splits = [string componentsSeparatedByString: @","]; 
     NSString *strbool = [splits objectAtIndex:0]; 
     NSString *strAtoken = [splits objectAtIndex:1]; 
     id UserIdLogin = [splits objectAtIndex:2]; 
     if ([strbool isEqualToString:@"true"]){ 

      main.strAccessTokenMain = strAtoken; 
      main.UserIdMain = UserIdLogin; 
      NSLog(@"strAccessTokenMain = %@",[main strAccessTokenMain]); 

      // Calling "showtabbar" method for Loading TabBarViewController page 
      [main showtabbar];  
     } 
     } 
     [soapresult appendString:string]; 
    } 
} 

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 

    if([elementName isEqualToString:@"LoginResult"]){ 
     itmselected = NO; 
    } 
} 

// Método "showtabbar" para el lanzamiento de TabBarViewController

- (void) {showtabbar

//Removing UIViewController's 'Login' page 
[self.view removeFromSuperview]; 
[BoleApp release]; 

NSLog(@"userID = %@",UserIdMain); 
tabbarcontroller = [[UITabBarController alloc]init ]; 

//Creating Object of "Profile" Class for Launching as First tab of TabBarViewController 
profile *view1 = [[profile alloc]initWithNibName:@"profile" bundle:nil ]; 
view1.strAccessToken = strAccessTokenMain; 
view1.UserIdProfile = UserIdMain; 
NSLog(@"view1str = %@",view1.strAccessToken); 
view1.title = @"Profile"; 
view1.tabBarItem.image = [UIImage imageNamed:@"profile.png"]; 

//Second Tab of TabBarViewController 
Brandslist *view2 = [[Brandslist alloc]init]; 
view2.BrandAccToken = strAccessTokenMain; 
view2.UserIdBrndList = UserIdMain; 
Instruction *view3 = [[Instruction alloc]init]; 
settings *view4 = [[settings alloc]init]; 
view2.title = @"Brands"; 
view2.tabBarItem.image = [UIImage imageNamed:@"brands.png"]; 

// Third Tab of TabBarViewController 
view3.title = @"Info"; 
view3.tabBarItem.image = [UIImage imageNamed:@"info.png"]; 

// Fourth Tab of TabBarViewController 
view4.title = @"Settings"; 
view4.tabBarItem.image = [UIImage imageNamed:@"settings.png"]; 
view4.AccessToken = strAccessTokenMain; 
view4.user_ID = UserIdMain; 

[tabbarcontroller setViewControllers:[NSArray arrayWithObjects:view1,view2,view3,view4, nil]]; 

[mainWindow addSubview:tabbarcontroller.view]; 

}

Esto es de mi página de perfil método "Salir" donde quiero escribir código para el Cierre de sesión de la página del perfil a la página de login (UIViewController)

-(IBAction)Logout{ 
    NSLog(@"Logout Button Clicked !!!"); 
    // What to code here for resuming back to Login page ????? Please Help me out 
    ? 
    ? 
    ? 
} 

amigos, por favor volver. Tu ayuda será apreciada . Gracias, Tauseef Khan

Respuesta

1

En lugar de utilizar, [mainWindow addSubview], utilice mainWindow.rootViewController = tabbarcontroller;

De esta manera, al pulsar el botón de cierre de sesión, sólo tiene que añadir algo como esto:

mainWindow.rootViewController = loginViewController; 

uso de este, solo está cambiando el controlador de visualización que se muestra en la ventana principal, y puede volver a cambiar al controlador de la barra de pestañas de la misma manera, después de un nuevo inicio de sesión.

+0

esto no funciona para mí !!! @paul N – NSExpression

+0

Debe eliminar todas las líneas de código [mainWindow addSubview: yourController.view] en su aplicación y reemplazarlas por mainWindow.rootViewController = yourController. –

0

Sería conveniente mostrar loginViewController como controlador de vista modal. De esta forma, siempre puede presentar el modal loginViewController si el servidor devuelve un error de autorización.

+0

¿Puedes elaborarlo? No entendí lo que está diciendo ... @onegray – NSExpression

+0

Creo que después de que el usuario cierre la sesión, debe volver a mostrar la pantalla de inicio de sesión. O el usuario puede no estar autorizado de forma inesperada, por ejemplo, si el token de autenticación está vencido. De esta manera, puede ser útil mostrar la pantalla de inicio de sesión modal que se superpone a otras pantallas de la aplicación. – onegray

+0

Sí, estás pensando bien ... Pero no sé cómo caducar el token de Acceso en mi caso ... si me das el código para eso sería genial para mí ... Como ya he desperdiciado más de 4 hora para resolver este problema ... @onegray Ayúdame a ayudar a otros – NSExpression

Cuestiones relacionadas