У меня есть контроллер представления, который содержит табличное представление, объекты в таблице могут быть выбраны и контроллер представления детали, должным образом созданный.
Объекты в таблице представляют объекты, которые могут иметь основанный на времени триггер, связанный с ними, и локальное уведомление планируется для каждого объекта, если приложение будет на переднем плане, когда локальное уведомление истекает затем, представление детали для объекта автоматически отображено.
У меня есть проблема, которая проявляет, когда два уведомления истекают одновременно, какие результаты в представлениях, не отображаемых правильно и кроме того, консоль регистрирует: "Несбалансированные вызовы для начинания/заканчивания переходов появления для NNN", где 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];
Я считал где-нибудь, что могла быть проблема, если контроллер представления продвигает другой контроллер представления, когда это само не находится на вершине стека - таким образом, я думал, что это должно быть проблемой, потому что, когда контроллер табличного представления получает 2-е уведомление, это больше не будет на вершине стопки навигации, потому что это ранее просто продвинет контроллер представления детали на стек, когда первое уведомление прибыло.
Таким образом, я изменил код нажатия на это:
[[self.navigationController topViewController].navigationController pushViewController:detailController animated:YES];
Но это не имело никакого значения.
Таким образом, я затем думал, что могла быть проблема, потому что первый контроллер представления детали не получал шанс полностью отобразиться, прежде чем 2-й контроллер представления был продвинут - таким образом, я изменил регистрацию уведомления своего приложения от использования:
[[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];
});
Я понятия не имею, что проблема или что попробовать затем, какие-либо идеи?
Можно добавить точку останова к
-[UIViewController _endAppearanceTransition:]
от того, где печать UIKit
"Unbalanced calls to begin/end appearance transitions for %@."
Это может помочь Вам с Вашими расследованиями