我如何改变观点有什么不对吗?

时间:2014-02-28 20:52:14

标签: ios iphone objective-c

我在任何时候都只需要1个视图。我的目标是ios 6并使用arc。

我有一个MasterViewController,我的所有视图都继承自,所以他们都有这个方法:

-(void) showNextView:(UIViewController*)newController
{
    [self.navigationController pushViewController:newController animated:true];
    [self.navigationController popToViewController:newController animated:false];
    [self viewDidChange];
}

因此,在MasterViewController的子类中,我们可能有:

-(IBAction)gameButtonPressed:(id)sender
{
    if(sender == self.btnEmotion)
    {
        [self showNextView:[[EmotionViewController alloc] initWithNibName:nil bundle:nil]];
    }
}

根视图控制器是导航栏。但基本上我是这样做的,所以只有1个视图。

但是,当我测试主视图控制器的dealloc时,它永远不会被调用。我不确定这是否意味着泄漏,或者是否是我不理解的事情。

我如何改变观点有什么不对吗?

由于

1 个答案:

答案 0 :(得分:2)

[self.navigationController pushViewController:newController animated:true];
[self.navigationController popToViewController:newController animated:false];

这不符合你的想法。 newController是推送后的顶视图控制器,因此pop不执行任何操作。因此,您只是在视图控制器上堆叠视图控制器。这就是为什么没有任何东西被解除分配的原因。

可能试试这个:

[self.navigationController pushViewController:newController animated:YES];
[self.navigationController setViewControllers:newController animated:NO];

但我没有尝试过,而且我不清楚你想要完成什么,所以我什么都不保证......

然而,考虑到所有事情,我觉得这是对视图控制器的误用。听起来我更像是transition⁠From⁠View:to⁠View:⁠du⁠ra⁠ti⁠on:⁠opt⁠io⁠ns:​completion:的工作 - 也就是说,用动画替换另一个视图。