簡體   English   中英

iOS:設置rootViewController不會刪除顯示的舊視圖控制器

[英]iOS: Setting the rootViewController doesn't remove the old presented view controllers

在我的Objective-C應用程序中,有一個loginViewController,在用戶成功登錄后,我從該位置顯示homeViewController。 這是我顯示房屋的方式:

-(void) displayHome {
UIViewController * home = [self.mainStoryboard instantiateViewControllerWithIdentifier:@"homeViewController"];
    _window.rootViewController = publicHome;
    [_window makeKeyAndVisible];
}

displayHome函數位於AppDelegate 之后,在homeViewController中,我使用了一些視圖控制器

[self presentViewController:controller animated:false completion:nil];

有時,我必須將用戶重定向到loginViewController,所以我將此VC稱為我的VC(通過設置rootViewController),以便刪除所有其他視圖。 但是,當我使用3d調試器時,我看到了所顯示的視圖。 為什么當我設置rootViewControllerloginViewController ,即使有連接到不會被刪除所提出的意見homeViewController是作為rootViewController

編輯

一個例子:

假設從homeViewController (即rootViewController )轉到viewController1 (顯示了viewController1 )。 現在,當我在按下一個按鈕viewController1我必須回到loginViewController 在按鈕操作中,這是我要做的:

我打電話

[self dismissViewControllerAnimated:false completion:nil];

[appDelegate displayLogin];

//AppDelegate
-(void) displayLogin {
UIViewController * login = [self.mainStoryboard instantiateViewControllerWithIdentifier:@"homeViewController"];
    _window.rootViewController = publicHome;
    [_window makeKeyAndVisible];
}

調試時,我發現viewController1仍然在這里。 它在登錄下。 即使設置了rootViewController為什么viewController1也位於rootViewController

也許您應該首先檢查UIViewControllers中是否已執行-dealloc方法。 嘗試在viewController1添加以下代碼:

- (void)dealloc {
    NSLog(@"ViewController %@ dealloc", NSStringFromClass([self class]));
}

如果尚未調用此方法,請在調用[self dismissViewControllerAnimated:false completion:nil];之后檢查是否還有指向viewController1強引用[self dismissViewControllerAnimated:false completion:nil];

這通常是由於保留計數而引起的,請檢查您的實現並確保沒有完成塊或不允許調用dealloc的操作。 一旦調用了dealloc,所有視圖將被刪除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM