2012-06-26 2 views
5

У меня возникла проблема с выходом из «TabBarViewController» в «UIViewController». Во-первых, я регистрируюсь (используя веб-службу SOAP + разбор XML) с страницы UIViewController, если пользовательский пароль и пароль правильно, то в базе данных генерируется «токен доступа» и (собранный в переменной с использованием разбора XML на нашей странице), а TabBarViewController - (страница профиля пользователя). Теперь после регистрации я хочу «LogOut». На странице профиля я поместил одну кнопку под названием «Выход».Выход из TabBarViewController в UIViewController с использованием AccessToken

Теперь, мне нужна ваша помощь, как LogOut, используя «Токен доступа» (который создается при успешном протоколировании). Чтобы вернуться на страницу входа в систему agian ?????

Ниже код выполняется при нажатии кнопки "Вход" I Нажмите после ввода "ID пользователя" и "Пароль" в 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; 

// Вызов веб-метод Service

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" Способ Запуск TabBarViewController

- (недействительными) 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 Хан

ответ

1

Вместо использования, [mainWindow addSubview] используйте mainWindow.rootViewController = tabbarcontroller;

Таким образом, при нажатии на кнопку выхода из системы, вам нужно только добавить что-то вроде этого:

mainWindow.rootViewController = loginViewController; 

Используя это, вы меняете только просмотр диспетчера представлений в главном окне, и после нового входа вы можете снова переключиться на контроллер панели табуляции.

+0

это не работает для меня !!! @paul N – NSExpression

+0

Вам необходимо удалить все [mainWindow addSubview: yourController.view] строки кода в вашем приложении и заменить их на mainWindow.rootViewController = yourController. –

0

Было бы удобно показать loginViewController в качестве модального контроллера. Таким образом, вы всегда можете представить модальный loginViewController, если сервер вернет ошибку авторизации.

+0

Можете ли вы его разработать! Я не получил то, что вы говорите ... @onegray – NSExpression

+0

Я думаю, что после выхода пользователя из системы он должен снова отобразить экран входа в систему. Или пользователь может стать неавторизованным неожиданно, например, если истекает срок действия токена авторизации. Таким образом, может оказаться полезным показать модальный экран входа в систему, который перекрывает другие экраны приложений. – onegray

+0

Да, вы правильно поняли ... Но я не знаю, как пропустить токен доступа в моем случае ... если вы предоставите мне код для этого, это будет здорово для меня ... Поскольку я уже потратил больше 4 час для решения этой проблемы ... @onegray Помогите мне помочь другим – NSExpression