7

我有一個委託/處理程序,我已經在我的UIViewControllers上實現處理超時到遠程web服務。當一個請求到我的Web服務時,返回超時HTTP代碼,委託被調用,並執行以下任務:self.navigationController是第二次加載ViewController

UINavigationController *navController = self.navigationController; 

if (navController) { 
    [navController popToRootViewControllerAnimated:YES]; 
} else { 
    NSLog(@"navController is null/nil"); 
} 

如果我做下面的步驟,navController正確實例化,並出現popToRootViewController行動。

  1. 驗證我的上一個登錄的ViewController
  2. 自動web服務應用觸發SEGUE到CustomMenuViewController
  3. 等待網絡服務來遠程超時
  4. 點擊觸發原因請看CustomSubMenuViewController

現在,如果我執行以下步驟,上述代碼塊中的else子句會被觸發,因爲由於某些原因navController未被正確設置:

  1. 與上 CustomLoginViewController
  2. 自動賽格瑞的WebService驗證我的應用程序到CustomMenuViewController
  3. 立即點擊觸發原因請看CustomSubMenuViewController
  4. 單擊後退按鈕來觸發彈出
  5. 等待webservice遠程超時
  6. 點擊觸發一個segue到相同的CustomSubMenuViewController

我的問題是:爲什麼當我第二次加載ViewController時,self.navigationController是否返回null?

在上面的例子調用堆棧應該是這樣的: NavigationController -> CustomLoginViewController -> CustomMenuViewController -> CustomSubMenuViewController

感謝

UPDATE: 仍然沒有作出任何關於此問題的進展!

+0

你有沒有排除任何在http://stackoverflow.com/a/7767160/1445366和http://stackoverflow.com/q/1983620/1445366描述的原因是什麼? –

+0

是 - 自我。當viewController首次被加載時,navigationController是可訪問的,當你離開它然後嘗試連續返回它時,它只是null。 – doug

+0

maake確定你沒有使它在ViewDidDisappear或ViewdidUnload中爲空 – Navi

回答

0

我想你可能已經解決了這個問題,但我遇到了完全相同的事情。而且我認爲我們可能會像使用Facebook進行登錄一樣完成同樣的事情。無論如何,對於未來的其他人來說,這可能是有用的。我遇到的問題是,當從故障狀態的背景返回時,重新分配UINavigationController。

所以你可以做的就是嘗試在你初始化你的uiNavigationController的rootViewController的地方放置一個斷點。

[[UINavigationController alloc] 
     initWithRootViewController:viewController]; and make sure that you do re-initailise your UINavigationController if you have already done it. 
2

嘿,這可能聽起來真的很基本,但是,你是否正確分配了Navbar對象,也許你可以嘗試設置它的屬性爲strong.It可能會讓它在時間之前被釋放。

相關問題