查看控制器重新加载而不是解雇

时间:2015-01-06 04:26:59

标签: ios objective-c iphone ios8

我有一个视图控制器,它以模态方式呈现导航控制器。导航控制器有2个视图控制器。

这三个视图控制器中的每一个都被委托给一个链。

最顶层的视图控制器VC3,我想一直关闭回到显示导航控制器VC1的视图控制器。

所以在VC3中我调用我的代理VC2

[self.delegate newGameViewController:self submitRound:nil forGame:self.game];

VC2做出反应

-(void)newGameViewController:(NewGameViewController *)newGameViewController submitRound:(NSDictionary *)round forGame:(Game *)game
{
    NSLog(@"Delegate Called");
    [self.navigationController popViewControllerAnimated:NO];
    [self.delegate turnViewController:self didCompleteTurnWithStats:[self statsWithOutcome:_wonTurn]];

}

这应该弹出导航控制器的顶视图,即VC3。然后调用它的委托,它是VC1 - 它呈现了UINavigationController

在VC1中

-(void)turnViewController:(TurnViewController *)turnViewController didCompleteTurnWithStats:(NSDictionary *)stats
{
     [self.turnNav dismissViewControllerAnimated:NO completion:^{
         [self updateData];
     }];
}

这应该关闭整个导航控制器,VC1应该是可见的视图控制器。

但这不是个案。

相反,它会重新加载VC3的新实例。

只有当VC3可见并且然后重新打开,或者应用程序切换到后台并返回时,手机才会锁定。我遵循Apple的指导方针,只是通过提供它们的控制器解除视图控制器 - 但是我的呈现控制器仍然会被解除分配?至少那就是我所假设的事情。

反正有没有阻止这个?我尝试注册名称的通知:UIApplicationDidEnterBackgroundNotification尝试在此之前尝试和解雇 - 但它只触发一半的时间。

由于

编辑:这是我在VC1中的updateData方法的代码 - 在解除导航控制器之前调用。我更新了代码,在导航控制器被解除后调用它。没有改变问题。

-(void)updateData
{
    [[GameManager instance] getGame:self.game withCompletion:^(Game *game, BOOL completed){
    if(completed)
    {
        if(game.played){
            [self loadGameComplete];
        } else {
            if(!roundsLoaded)
                [self shouldLoadRounds];

            if(UILoaded && roundsLoaded)
                [self updateUI];

            if(self.game.lastTurn.played && self.game.myTurn)
                [self shouldSendPhoto];
        }
    } else {
        if(!roundsLoaded)
            [self loadError];
    }
}];
}

编辑2:我现在在VC1中明确地解雇了导航控制器,我也有很强的参考价值。仍在重新加载VC3而不是解雇。

这是我在VC1中的方法,它以VC2作为根加载导航控制器。

-(void)loadTurn:(Turn *)turn
{
    if(turn.played){ [self shouldSendPhoto]; return; }

    TurnViewController *turnVC = [[TurnViewController alloc] initWithGame:self.game andTurn:turn];
     turnVC.delegate = self;
     self.turnNav = [[UINavigationController alloc] initWithRootViewController:turnVC];
     self.turnNav.navigationBar.translucent = NO;
     if(IS_IPHONE_4_OR_LESS)
         self.turnNav.navigationBarHidden = YES;

     [self presentViewController:self.turnNav animated:YES completion:nil];
 }

0 个答案:

没有答案