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

loginPerform函數在回調函數中調用,並且兩個日誌都可以打印,因此performSegueWithIdentifier會執行。但當前視圖不會更改。performSegueWithIdentifier不起作用回調函數?

  1. view A和view B由Custom Segue關聯。
  2. 視圖嵌入導航控制器。

順便說一句:我把測試按鈕直接執行segue,它的工作原理。 當loginPerform函數被調用時,下一個視圖總是查看A時點擊測試按鈕。

我不明白whatnd.anybody可以幫助我嗎?

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

這是稱爲在回調function.Just 1個打印

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

這是一個測試按鈕,測試執行賽格瑞的執行功能。它運作良好。

+0

你在寫什麼類的代碼。 UIViewController子類?你能否用更多的代碼來闡述你的問題。 – Divyu

+0

檢查您的segue標識符名稱。它是一樣的嗎? – Rox

+0

調用的回調是什麼線程? – Wain

回答

0

由於它是一個自定義的原因請看它不會推動第二視圖automatically.You需要實現你的類prepareForSegue功能與此類似:

- (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」sender:self];不會跑。 – user2518788

4

您需要等到其他視圖控制器做動畫,在執行賽格之前。您可以使用新的iOS 5方法:

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

如果你需要預先iOS 5的方式做到這一點,你應該只添加一個延遲執行SEGUE之前給動畫時間。

否則你可以去這裏iOS delegate not working with performSegueWithIdentifier?