2012-06-26 24 views
5

Tôi đang gặp sự cố về cách đăng xuất khỏi "TabBarViewController" thành "UIViewController". Thứ nhất, tôi đang đăng nhập (sử dụng dịch vụ web SOAP + phân tích cú pháp XML) từ trang UIViewController, Nếu userId và Mật khẩu đúng thì 'Mã truy cập' được tạo trong cơ sở dữ liệu và (được thu thập bằng biến bằng cách sử dụng phân tích cú pháp XML trong trang của chúng tôi) và TabBarViewController là được tải (trang hồ sơ người dùng). Bây giờ sau khi đăng nhập tôi muốn "LogOut". Trên trang hồ sơ Tôi đặt một nút gọi là "Đăng xuất".Đăng xuất từ ​​TabBarViewController sang UIViewController bằng AccessToken

Bây giờ đây, tôi cần trợ giúp của bạn làm thế nào để sử dụng logout 'Truy cập Mã' (được tạo ra trong khai thác gỗ thành công) Vì vậy mà tôi quay trở lại trang đăng nhập agian ?????

Dưới đây là mã đang chạy khi tôi Nhấn nút "Đăng nhập" sau khi nhập "User ID" và "Mật khẩu" trong 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; 

// Gọi Web Method Dịch vụ

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" Phương thức khởi chạy 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]; 

}

Đây là trang hồ sơ cá nhân của tôi "Thoát" Phương pháp mà tôi muốn viết mã cho Đăng xuất từ ​​trang hồ sơ đến trang đăng nhập (UIViewController)

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

bạn bè, hãy quay trở lại. Sự giúp đỡ của bạn sẽ được trân trong . Cảm ơn, Tauseef Khan

Trả lời

1

Thay vì sử dụng, [mainWindow addSubview], sử dụng mainWindow.rootViewController = tabbarcontroller;

Bằng cách này, khi nhấn nút đăng xuất, bạn chỉ cần thêm một cái gì đó như thế này:

mainWindow.rootViewController = loginViewController; 

Sử dụng này, bạn chỉ thay đổi viewcontroller đang được hiển thị trên Main Window, và bạn có thể chuyển đổi một lần nữa để điều khiển thanh tab trong cùng một cách, sau khi đăng nhập mới.

+0

tính năng này không hoạt động đối với tôi !!! @paul N – NSExpression

+0

Bạn cần xóa tất cả các dòng lệnh [mainWindow addSubview: yourController.view] trong ứng dụng của bạn và thay thế chúng bằng mainWindow.rootViewController = yourController. –

0

Sẽ thuận tiện khi hiển thị loginViewController làm bộ điều khiển chế độ xem phương thức. Bằng cách này, bạn luôn có thể trình bày phương thức loginViewController nếu máy chủ trả về lỗi ủy quyền.

+0

Bạn có thể xây dựng nó !! Tôi không có những gì bạn đang nói ... @onegray – NSExpression

+0

Tôi nghĩ rằng sau khi người dùng đăng xuất, nó cần hiển thị lại màn hình Đăng nhập. Hoặc người dùng có thể trở thành bất hợp pháp trái phép, ví dụ: nếu mã thông báo xác thực đã hết hạn. Bằng cách này, có thể hữu ích khi hiển thị màn hình đăng nhập phương thức chồng chéo lên các màn hình ứng dụng khác. – onegray

+0

Vâng, bạn đang suy nghĩ đúng ... Nhưng tôi không biết cách hết hạn mã thông báo Access trong trường hợp của tôi ... nếu bạn cung cấp cho tôi mã cho rằng nó sẽ là tuyệt vời cho tôi ... Như tôi đã lãng phí hơn 4 giờ để giải quyết vấn đề này ... @onegray Giúp tôi Giúp những người khác – NSExpression

Các vấn đề liên quan