-(void)loginPerform
{
NSLog(@"start to perform segue!");
[self performSegueWithIdentifier:@"SecondPage" sender:self];
NSLog(@"end perform login!");
}
loginPerform 関数はコールバック関数で呼び出されます。2 つのログはどちらも出力できるため、performSegueWithIdentifier が実行されます。ただし、現在のビューは変更されません。
- ビューAとビューBはカスタムセグエで接続されています。
- ビュー ナビゲーション コントローラーの埋め込み。
ところで:セグエを直接実行するテストボタンを配置しましたが、動作します。loginPerform 関数が呼び出されると、テスト ボタンをクリックすると、次のビューは常にビュー A になります。
何が起こったのか理解できません。誰か助けてくれませんか?
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
}];
}
これは、コールバック関数で呼び出される実行関数です.Just 1 print
- (IBAction)test_click:(id)sender {
[self performSegueWithIdentifier:@"SecondPage" sender:self];
}
これは、セグエの実行をテストするためのテスト ボタンです。そしてそれはうまくいきます。