在异步块中执行segue

时间:2014-06-11 08:56:12

标签: ios objective-c xcode

用户登录我的应用程序后,我使用POST请求将他的用户配置文件发送到我的服务器,如果成功完成,我调用成功块通知我的控制器,里面我想执行一个segue但是segue是没有工作,什么也没发生。

这是我的代码:

RemoteCallManager   *rcm = [[RemoteCallManager alloc] init];

if (![[NSUserDefaults standardUserDefaults] boolForKey:IS_FIRST_LAUNCH])
{
    // Is first launch
    [rcm sendNewUserProfile:self.player andSuccessBlock:^(NSDictionary *result) {

        [[Utils sharedInstance] extractAndSaveSessionDataWithResultFromRequest:result];

        [(AppDelegate*)[[UIApplication sharedApplication] delegate] setPlayer:self.player];
        [(AppDelegate*)[[UIApplication sharedApplication] delegate] archivePlayerObject];
        [(AppDelegate*)[[UIApplication sharedApplication] delegate] archiveGameSession];

        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:IS_FIRST_LAUNCH];

        [self performSegueWithIdentifier:@"pushToMenu" sender:self];

    } andErrorBlock:^(NSString *description) {
        NSLog(@"An error occured : %@", description);
    }];
}
else
{
    // Is not first launch
    [self performSegueWithIdentifier:@"pushToMenu" sender:self];
}

我试图在dispatch_sync中调用segue但没有成功。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

你是否在dispatch_sync中切换了主队列?我认为您应该使用dispatch_async(dispatch_get_main_queue() ...,因为您似乎不需要等待执行调用。

答案 1 :(得分:0)

最后我发现了我的错误,但我不明白为什么。我有一个loadingViewController,它决定要显示的第一个视图控制器是loginViewController还是menuViewController。登录后,loginViewController使用segue推送到menuViewController。

在loadingVC和loginVC之间我有一个模态segue,在loginVC和menuVC之间有一个push segue。如果我将模态更改为push,它可以正常工作。

我不明白我的segue没有用模态执行的原因。如果有人有答案,我会接受:)

感谢您的帮助。