更改UIWindow的rootViewController

alo*_*loo 25 uiviewcontroller uiwindow ios rootview

当我的应用程序第一次加载时,我将rootViewControllermy 的属性设置UIWindowcontrollerA.

在我的应用程序中的某个时候,我选择更改rootViewControllercontrollerB.

问题在于,有时当我进行翻转过渡时controllerB,我会看到controllerA背后的观点.由于某种原因,视图没有被删除.什么更令人担忧的是,设置后rootViewControllercontrollerB,controllerAdealloc方法永远不会被解雇.

我已经尝试UIWindow在切换之前删除手动的子视图controllerB,这解决了controllerA在后台看到视图的问题但是controllerAdealloc仍然永远不会被调用.这里发生了什么????

苹果文档说:

根视图控制器提供窗口的内容视图.将视图控制器分配给此属性(以编程方式或使用Interface Builder)将视图控制器的视图安装为窗口的内容视图.如果窗口具有现有视图层次结构,则在安装新视图之前将删除旧视图.

UPDATE

这是我的AppDelegate的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self showControllerA];
    [self.window makeKeyAndVisible];
    return YES;
}

- (void)showControllerA
{
    ControllerA* a = [ControllerA new];
    self.window.rootViewController = a;
}

- (void) showControllerB {
    ControllerB* b = [ControllerB new];
    self.window.rootViewController = b;
}
Run Code Online (Sandbox Code Playgroud)

alo*_*loo 10

事实证明,有两个不同的问题.1)我在控制器A中有一个保留周期,所以它从来没有得到dealloc'd.其次,为了改变根视图控制器,你必须删除Windows子视图第(即使文档并非如此)