У меня есть контроллер представления, который содержит представление таблицы, элементы в таблице могут быть выбраны, и контроллер детального представления создан должным образом.
Элементы таблицы представляют элементы, которые могут иметь связанный с ними триггер, связанный с временем, и для каждого элемента назначается локальное уведомление, если приложение находится на переднем плане при истечении локального уведомления, тогда детальное представление элемента автоматически отображается.
У меня есть проблема, которая проявляется, когда два уведомления истекают одновременно, что приводит к неправильному отображению представлений и, кроме того, к журналам консоли: "Неуравновешенные вызовы для перехода на начало/конец перехода для 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];
Я где-то читал, что может возникнуть проблема, если контроллер представления подталкивает другой контроллер представления, когда он сам не находится в верхней части стека, поэтому я думал, что это должна быть проблема, потому что когда контроллер табличного представления получает второй что он больше не будет находиться в верхней части навигационного стека, потому что ранее он просто нажал контроллер подробного представления в стек, когда поступило первое уведомление.
Итак, я изменил код push:
[[self.navigationController topViewController].navigationController pushViewController:detailController animated:YES];
Но это не имело значения.
Итак, я подумал, что может возникнуть проблема, потому что первый контроллер подробного представления не получил возможности полностью отображать до 2-го контроллер просмотра был нажат - поэтому я изменил проводку уведомлений о приложении с помощью:
[[NSNotificationCenter defaultCenter] postNotificationName:
к
[[NSNotificationQueue defaultQueue] enqueueNotification: postingStyle:NSPostWhenIdle]
Так что толкания не будут возникать в пределах одного и того же действия цикла приложения. Но это не имело никакого значения и не пыталось ввести задержку в нажатие кнопки просмотра деталей:
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];
});
Я не знаю, в чем проблема или что попробовать дальше, любые идеи?