2013-04-17 36 views
0

我很煩惱的問題,我無法解決它!我有4個視圖控制器(主視圖控制器是一個UITableView,settingsVC,messsageDetailController和moreInfoVC)。我有4個視圖控制器(主視圖控制器是一個UITableView,settingsVC,messsageDetailController和moreInfoVC)。 - 我也有一個偵聽器(NSObject),它正在偵聽端口以接收不同的事件。從NSObject推動幾個viewcontroller

然後,功能是下一個: - 我啓動偵聽器來接收這些事件。當偵聽器接收到新事件時,此偵聽器與mainViewController進行通信,並從此mainVC創建messageDetailController的新實例。 *即時通訊使用下面的代碼(mainVC):

[self performSegueWithIdentifier:@"MessageDetail" sender:self]; 

我得到了所有這些功能,但是當我的聽衆接受一個以上的事件,然後,因此,我創建多個messageDetailController參考我的問題開始。這個問題直接影響到我的NavigationController,這使我彈出下一條消息: - 嵌套的推動動畫可能導致損壞的導航欄 - 非平衡調用開始/結束外觀轉換。 - 完成處於意外狀態的導航轉換。導航欄子視圖樹可能會損壞。

我希望我能正確解釋自己,任何人都可以幫助我。

+0

很難勸你不知道更多關於你想要的行爲。當聽衆收到第二個事件時你想要發生什麼?你想讓messageDetailController只顯示有關新事件的信息嗎?你想顯示關於這兩個事件的信息,並在新事件進來時繼續添加嗎? – rdelmar

+0

我只想顯示我在聽衆中收到的新信息。這就是爲什麼我創建一個新的messageDetailController ...我不知道它的最好的主意是誠實的... – rubrin

回答

0

解決方案:

NSMutableArray *array = [NSMutableArray arrayWithArray::self.navigationController.viewControllers]; 

for(NSInteger i = ([array count] - 1); i > 0; i--) 
    if(i != 0) 
     [array removeObjectAtIndex:i]; 

self.navigationController.viewControllers = array; 

[self performSegueWithIdentifier:@"MessageDetail" sender:[settingsReference actualView]]; 
0

你可能不想用segue來做你想要做的事情,因爲segue總是創建一個新的視圖控制器。最好在代碼中推送messageDetailController,這樣你就可以在那裏放置一個if子句,只創建並推送控制器(如果不存在的話)。當第二個事件進入時,您只需更改所顯示內容的值。代碼可能是這樣的(在主視圖控制器中,我猜,如果這是從監聽器獲取信息的東西)。

if (! messageDetailController) { 
    MessageDetailController *messageDetailController = self.storyboard instantiateViewControllerWithIdentifier:@"MessageController"]; 
    messageDetailController.detailItem = infoFromListener; 
    [self.navigationController pushViewController:messageDetailController animated:YES]; 
}else{ 
    messageDetailController.detailItem = infoFromListener; 
} 
+0

我仍然有相同的行爲。例如,如果您在另一個視圖控制器(settingsVC)中,並且在這種情況下,監聽器會收到一條新消息,我將在messageDetailController上顯示此消息。但是,此刻我按後退按鈕(messageDetailController)去mainVC(因爲是rootVC),我的navigationController顯示我以前barNavigationController(settingsCV).... – rubrin

+0

@rubrin,以及如果您的訂單是mainVC - - > settingsVC - > messageDetailVC那麼這就是你將要得到的行爲。如果你不想這樣做,那麼你需要做出不同的設計。當新消息出現時,你想要發生什麼並不十分清楚 - 你是否希望它不僅更新messageDetailVC,還要顯示vc,而不管你在看什麼視圖?你只是想要它更新,但用戶不會看到它,直到他們回到它?你需要填寫更多關於你想要的信息。通常,設置控制器不會處於其他vc之間的路徑中。 – rdelmar

+0

用戶可以在任何不同的VC中。訂單是mainVC-messageDetailVC-moreInfoVC和mainVC-settingsVC。所以,獨立於哪個VC,當聽衆收到一條新消息時,我想展示它。我希望現在已經夠清楚了。謝謝rdelmar – rubrin

相關問題