“Несбалансированные вызовы для начинания/заканчивания переходов появления для DetailViewController” при продвижении больше чем одной детали просматривают контроллер

У меня есть контроллер представления, который содержит табличное представление, объекты в таблице могут быть выбраны и контроллер представления детали, должным образом созданный.

Объекты в таблице представляют объекты, которые могут иметь основанный на времени триггер, связанный с ними, и локальное уведомление планируется для каждого объекта, если приложение будет на переднем плане, когда локальное уведомление истекает затем, представление детали для объекта автоматически отображено.

У меня есть проблема, которая проявляет, когда два уведомления истекают одновременно, какие результаты в представлениях, не отображаемых правильно и кроме того, консоль регистрирует: "Несбалансированные вызовы для начинания/заканчивания переходов появления для 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]; 
});

Я понятия не имею, что проблема или что попробовать затем, какие-либо идеи?

61
задан 1 February 2012 в 03:11

1 ответ

Можно добавить точку останова к

-[UIViewController _endAppearanceTransition:]

от того, где печать UIKit

"Unbalanced calls to begin/end appearance transitions for %@."

Это может помочь Вам с Вашими расследованиями

0
ответ дан 31 October 2019 в 15:28

Другие вопросы по тегам:

Похожие вопросы: