2015-01-01 2 views
0

두 개의 다른보기 컨트롤러가 있습니다. 하나는 대시 보드 용이고 다른 하나는 등록 용 컨트롤러입니다. 사용자가 alertview를 통해 로그인 할 때까지 사용자가 대시 보드에서 아무 것도 할 수 없도록하고 싶습니다. 따라서 사용자가 대시 보드로 돌아가거나 취소를 누를 때마다 로그인하지 않을 때마다 로그인 경고가 팝업으로 표시됩니다.viewWillAppear UIAlertView가 표시되지 않습니다.

사용자가 등록보기의 탐색 모음에서 뒤로 단추를 누르지 만 사용자가 등록 페이지의 경고에서 확인을 클릭하면 작동하지 않는 경우를 포함하여 모든 경우에 완벽하게 작동합니다.

@property(strong) UIAlertView * alert; 
//... 
-(void)viewWillAppear:(BOOL)animated 
{ 
    user_email = [[NSUserDefaults standardUserDefaults] stringForKey:@"email"]; 
    if (user_email==nil){ 
     [self auto_login]; 
    } else //... 
} 

-(void)auto_login 
{ 
    alert = [[UIAlertView alloc] initWithTitle:@"Login" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Login",@"Forgot Password",@"Register",nil]; 
    alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput; 
    [alert show]; 
} 

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    switch (buttonIndex) { 
     case 0: 
     { 
      self.debug.text = @"Cancel"; 
      [self auto_login]; 
      break; 
     } 
     //... 
     default: 
     { 
      self.debug.text = @"Register"; 
      [self nav_register]; 
      break; 
     } 
    } 
} 

-(void)nav_register 
{ 
    RegisterProfileController *rvc = [[RegisterProfileController alloc] init]; 
    [self.navigationController pushViewController:rvc animated:YES]; 
} 

등록 뷰 컨트롤러가이 코드를 포함 :

대시 보드 뷰는이 코드가 포함되어

-(void)catch_registration 
{ 
    NSString *response = [[NSString alloc] initWithData:self.httpdata encoding:NSASCIIStringEncoding]; 
    if([response isEqualToString:@"OK"]){ 
     UIAlertView *successAlert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"..." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     successAlert.alertViewStyle = UIAlertViewStyleDefault; 
     [successAlert show]; 
    } 
    else //... 
} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if ([alertView.title isEqualToString:@"Success"]) 
     [self.navigationController popViewControllerAnimated:TRUE]; 
} 

디버깅 후, 내가 아는을 그 등록 뷰 컨트롤러에서 clickedButtonAtIndex 실행, [alert show] 실행 후 대시 보드보기 컨트롤러에서는 clickedButtonAtIndex이 실행되지 않지만 경고는 표시되지 않습니다.

왜 경고가 표시되지 않거나 어떻게 디버깅 할 수 있습니까?

+2

viewWillAppear 코드를 viewDidAppear로 이동해보십시오. 현재보기를 제공 할보기가 있기 전에 경고를 표시하려고하기 때문에 viewDidAppear로 이동하십시오. (사실 귀하의 질문을 다시 읽으면 나는이 문제를 이해하고 있는지 100 % 확신하지 못합니다.) –

+0

아니, 그게 문제였습니다. viewDidAppear 메서드가 있다는 것을 몰랐습니다. 이제 작동합니다. – Cbas

+0

좋습니다. 당신이 그것을 알아 낸 것을 기뻐. :) –

답변

0

clickedButtonAtIndex이 "실행되지 않습니다"라고 말한 경우 delegate이 올바르게 설정되지 않았을 수 있습니다. 또한 뷰가 해당 시점의보기 계층에 없기 때문에 viewWillAppear:에서 viewDidAppear:으로 코드를 이동해야합니다. 귀하의 솔루션은이 두 가지 문제의 결합 일 수 있습니다.

관련 문제