ios:更改window.rootViewController和内存管理

时间:2012-10-16 14:27:20

标签: ios memory-management uiviewcontroller uiviewanimationtransition appdelegate

我面临以下问题:我的应用程序有两个主控制器(a)loginController和(b)contentController,当应用程序启动时我检查用户是否登录如果是,我显示contentController否则我显示登录控制器。所以基本上在didFinishLaunchingWithOptions中我将这个控制器之一分配给window.rootViewController。问题是当我想从一个控制器切换到另一个控制器(因为用户登录或注销)来完成此操作时,我使用以下代码:

[UIView transitionWithView:self.window
                  duration:0.65
                   options:UIViewAnimationOptionTransitionFlipFromLeft
                animations:^{
                    self.window.rootViewController = self.contentController;
                }
                completion:^(BOOL finished){
                    [self.loginController release];
                }];

在此转换窗口之前.rootViewController是loginController,这里的问题是当执行此代码时我收到以下错误:

-[loginController _preferredInterfaceOrientationGivenCurrentOrientation:]: message sent to deallocated instance 0x1c55b490

我想了解如何在不收到此错误的情况下释放控制器。 如果有人可以建议我在运行时更改window.rootViewController的最佳方法,也会很棒。

1 个答案:

答案 0 :(得分:1)

如果没有看到更多代码,就无法确定出现内存管理问题的原因。但我想提供一个不同的答案。使您的内容控制器始终成为窗口的根控制器。如果需要显示登录屏幕,请将其作为模式视图控制器显示在内容控制器上。这比切换根视图控制器容易得多。您可以在启动时显示没有动画,因此用户永远不会看到它的转换。登录后,您可以忽略任意数量的方式来揭示其下方的内容控制器。如果用户注销,则可以再次显示登录控制器,作为内容控制器上的模态控制器。