5

「TabBarViewController」から「UIViewController」にログアウトする方法に問題があります。まず、UIViewControllerページから(SOAPWebサービス+XML解析を使用して)ログインしています。userIdとPasswordが正しい場合、「アクセストークン」がデータベースに生成され(このページのXML解析を使用して変数に収集されます)、TabBarViewControllerが読み込まれます。 (ユーザープロファイルページ)。ロギング後、「ログアウト」したいと思います。プロファイルページに、「ログアウト」というボタンを1つ配置しました。

ここで、「アクセストークン」(正常なロギング中に生成される)を使用してログアウトする方法についてのヘルプが必要です。ログインページに戻るには、agian ?????

以下は、UITextFieldに「ユーザーID」と「パスワード」を入力した後、「ログイン」ボタンを押したときに実行されるコードです。

-(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;

//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;
    }
}

//TabBarViewControllerを起動するための「showtabbar」メソッド

-(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];

}

これは、プロファイルページからログインページ(UIViewController)にログアウトするためのコードを記述したいプロファイルページの「ログアウト」メソッドです。

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

友達、元に戻してください。あなたの助けをいただければ幸いです。ありがとう、Tauseef Khan

4

2 に答える 2

1

[mainWindow addSubview]を使用する代わりに、mainWindow.rootViewController = tabbarcontroller;

このように、ログアウト ボタンを押すと、次のようなものを追加するだけで済みます。

mainWindow.rootViewController = loginViewController;

これを使用すると、メイン ウィンドウに表示されているビュー コントローラーを変更するだけで、新規ログイン後に同じ方法でタブ バー コントローラーに再度切り替えることができます。

于 2012-06-26T22:11:25.813 に答える
0

loginViewControllerモーダル ビュー コントローラーとして表示すると便利です。loginViewControllerこのようにして、サーバーが認証エラーを返した場合に常にモーダルを表示できます。

于 2012-06-26T22:43:23.607 に答える