2012-06-26 13 views
5

Mam problem z wylogowaniem się z "TabBarViewController" do "UIViewController". Po pierwsze loguję się (używając usługi sieci web SOAP + parsowanie XML) ze strony UIViewController, jeśli identyfikator użytkownika i hasło są poprawne, generowany jest "token dostępu" w bazie danych i (gromadzone w zmiennej przy użyciu analizowania XML na naszej stronie) i tabBarViewController jest załadowany (strona profilu użytkownika). Teraz po zalogowaniu chcę "LogOut". Na stronie profilu umieściłem jeden przycisk o nazwie "Wylogowanie".Wylogowanie się z TabBarViewController na UIViewController za pomocą AccessToken

Teraz potrzebuję twojej pomocy, jak zalogować się przy użyciu "Token dostępu" (który jest generowany podczas udanego logowania). Wracam więc do strony logowania agian ?????

Poniżej kod jest uruchomiony po naciśnięciu przycisku "Login" po wpisaniu "ID użytkownika" i "Hasło" w 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; 

// Wywołanie metody usługi sieci 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; 
    } 
} 

// "showtabbar" Sposób na uruchomienie 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]; 

}

To „Wyloguj” Metoda stronie profilu, gdzie chcę, aby napisać kod dla Wylogowanie ze strony profilu do strony logowania (UIViewController)

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

Przyjaciele, proszę wrócić. Twoja pomoc byłaby doceniona. Dzięki Tauseef Khan

Odpowiedz

1

Zamiast, [mainWindow addSubview] użyć mainWindow.rootViewController = tabbarcontroller;

ten sposób, po naciśnięciu przycisku wylogowania, tylko trzeba dodać coś takiego:

mainWindow.rootViewController = loginViewController; 

Używanie tego, zmieniasz tylko viewcontroller wyświetlany w Main Window i możesz ponownie przełączać się do kontrolera paska kart w ten sam sposób, po nowym logowaniu.

+0

to nie działa dla mnie !!! @paul N – NSExpression

+0

Musisz usunąć wszystkie linie kodu [mainWindow addSubview: yourController.view] w swojej aplikacji i zastąpić je mainWindow.rootViewController = yourController. –

0

Byłoby wygodne, aby pokazać loginViewController jako kontroler widoku modalnego. W ten sposób zawsze możesz pokazać modalny loginViewController, jeśli serwer zwróci błąd autoryzacji.

+0

Czy możesz to rozwinąć !! Nie mam tego, co mówisz ... @onegray – NSExpression

+0

Myślę, że po wylogowaniu użytkownik musi ponownie wyświetlić ekran logowania. Lub użytkownik może zostać nieautoryzowany nieoczekiwanie, na przykład, jeśli token uwierzytelnienia wygasł. W ten sposób może być pomocne wyświetlanie modalnego ekranu logowania, który pokrywa się z innymi ekranami aplikacji. – onegray

+0

Tak, masz rację ... Ale nie wiem, jak wygasić token dostępu w moim przypadku ... jeśli podasz mi kod, będzie to dla mnie wspaniałe ... Jak już zmarnowałem więcej niż 4 godzina rozwiązania tego problemu ... @onegray Pomóż mi pomóc innym – NSExpression

Powiązane problemy