2013-06-25 3 views
1
-(void)loginPerform 
{ 
    NSLog(@"start to perform segue!"); 
    [self performSegueWithIdentifier:@"SecondPage" sender:self]; 
    NSLog(@"end perform login!"); 
} 

loginPerform 함수는 콜백 함수에서 호출되며 두 로그는 모두 performSegueWithIdentifier 실행을 인쇄 할 수 있습니다. 그러나 현재보기는 변경되지 않습니다.performSegueWithIdentifier가 콜백 함수에서 작동하지 않습니까?

  1. 보기 A 및보기 B는 사용자 정의 세그먼트로 연결됩니다.
  2. 보기 A 내비게이션 컨트롤러에 내장.

BTW : 테스트 버튼을 직접 눌러 segue를 직접 수행하면 작동합니다. loginPerform 함수가 호출되면 다음 뷰는 항상 테스트 버튼을 클릭하면 표시됩니다.

나는 무슨 일이 일어 났는지 이해하지 못합니다. 누구든지 나를 도울 수 있습니까?

int user_account_delegate(int reqid, char* msg) 
{ 
    NSLog(@"DEBUG: login return %s", msg); 
    int reterr = 0; 

    if(reqid!=[BLSInstLink getLoginID]) 
     return -1; 

    /* parse the login result (JSON) */ 
    if(get_json_object_value(msg, KEY_ERROR, VAL_INTEGER, (void*)&reterr)==0) 
    { 
     if(reterr==0) 
     { 
      NSLog(@"DEBUG: login succeed."); 
      [BLSInstLink setLogined:YES]; 
      BLSViewController *this = THIS; 
      [this loginPerform]; 
     } 
     else 
     { 
      NSLog(@"DEBUG: login failed. err=%d", reterr); 
      [BLSInstLink setLogined:NO]; 
      [BLSInstLink setErrorCode:reterr]; 
     } 
    } 
    [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_LOGINRESULT object:nil]; 
    return 0; 
} 

이것은 내 자신의 UIViewController에서 구현하는 콜백 함수입니다.

-(void)loginPerform{ 
    NSLog(@"in loginPerform");//1 
    [self dismissViewControllerAnimated:YES completion:^() { 
     NSLog(@"start perform page2");//2 
     [self performSegueWithIdentifier:@"SecondPage" sender:self]; 
     NSLog(@"end perform page2");//3 
    }]; 
} 

이 1 인쇄

- (IBAction)test_click:(id)sender { 
[self performSegueWithIdentifier:@"SecondPage" sender:self]; 
} 

SEGUE이 테스트를 수행하는 테스트 버튼이다 콜백 function.Just 불리는 기능을 수행한다. 잘 작동합니다.

+0

이 코드를 작성하는 클래스는 어떤 종류입니까? UIViewController 서브 클래스? 좀 더 많은 코드로 질문을 상세하게 만들 수 있습니까? – Divyu

+0

segue 식별자 이름을 확인하십시오. 똑같은가요? – Rox

+0

콜백이 호출되는 스레드는 무엇입니까? – Wain

답변

0

그것이 사용자 정의가 automatically.You이 유사 클래스의 prepareForSegue 기능을 구현해야 두 번째보기를 밀어 실 거예요 SEGUE이므로 : 당신은 다른 뷰 컨트롤러가 애니메이션 완료 될 때까지 기다릴 필요가

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
     if ([segue.identifier isEqualToString:@"SecondPage"]) 
     {  
      secondViewController = [segue destinationViewController]; 
      //add second view as subview of first view. 
     } 
    } 
+0

Thx. 나는 당신의 방식을 시도했지만보기 A의 dismissViewControllerAnimated에 문제가있는 것 같습니다. 그래서 [self performSegueWithIdentifier : @ "My Segue"보낸 사람 : 자기]; 도망 간다. – user2518788

4

을, segue를 수행하기 전에. 당신이 그것을 할 수있는 사전에서 iOS 5 방법이 필요하면 그냥 SEGUE을 수행하기 전에 애니메이션의 시간을 제공하기 위해 지연을 추가해야합니다,

[self dismissViewControllerAnimated:YES completion:^() { 
    [self performSegueWithIdentifier:@"My Segue" sender:self]; 
}]; 

: 당신은 새로운 아이폰 OS (5) 방법을 사용할 수 있습니다.

그렇지 않으면 여기로 이동하십시오. iOS delegate not working with performSegueWithIdentifier?

관련 문제