我有一個視圖控制器,它包含一個表視圖,可以選擇表中的項目並且可以正確創建一個詳細視圖控制器。當推送多個詳細視圖控制器時,「DetailViewController開始/結束外觀轉換的不平衡調用」
表中的項目表示可以具有與它們相關聯的基於時間的觸發器的項目,並且爲每個項目安排本地通知(如果當本地通知到期時應用處於前臺,則該項目的詳細視圖會自動顯示。
當兩個通知同時過期而導致視圖不能正確顯示並且另外還有控制檯日誌時,我遇到了一個問題: 「NNN的開始/結束外觀轉換不平衡調用」我的詳細視圖控制器。
表視圖控制器按如下方式創建:
self.tableViewController = [[TableViewController alloc] initWithNibName:@"TableView" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.tableViewController];
self.window.rootViewController = navController;
當本地通知到期和didReceiveLocalNotification:使用NSNotifcationCenter postNotificationName被調用應用程序播放一個通知:和其中表視圖控制器被偵聽。當表視圖控制器接收通知它創建的細節視圖控制器和它推到堆棧爲:
[self.navigationController pushViewController:detailViewController animated:YES];
我讀的地方,如果一個視圖控制器推動另一視圖控制器有可能是一個問題,當它本身是不在堆棧的頂部 - 所以我認爲這一定是問題,因爲當表視圖控制器接收到第二個通知時,它將不再位於導航堆棧的頂部,因爲它以前只會推送一個詳細視圖控制器當第一次通知到達時,將其放入堆棧。
所以我改變了推代碼這樣:
[[self.navigationController topViewController].navigationController pushViewController:detailController animated:YES];
但它並沒有區別。
所以接下來我想有可能是一個問題,因爲第一個細節視圖控制器沒有得到到第二 視圖控制器之前充分展示的機會被推 - 所以我改變了我的應用程序的通知發佈使用:
[[NSNotificationCenter defaultCenter] postNotificationName:
到
[[NSNotificationQueue defaultQueue] enqueueNotification: postingStyle:NSPostWhenIdle]
這樣的推動不會應用循環的同一iteraction內發生。但是,這並沒有區別,也沒有嘗試引入延遲到詳細視圖controlle的推動:
double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[[self.navigationController topViewController].navigationController pushViewController:detailController animated:YES];
});
我不知道去嘗試什麼問題或有什麼未來,任何想法?
陷入了類似的情況,找到了解決:http://stackoverflow.com/questions/19500025/uinavigationcontroller-transition-animations-triggered-too-fast/19738292#19738292 – 2013-11-02 02:23:37