J'ai une vue contrôleur qui contient une vue de la table, les éléments du tableau peuvent être sélectionnées et une vue de détail contrôleur dûment créé.
Les éléments dans le tableau représentent les éléments qui peuvent avoir une base de temps de déclenchement associé avec eux et un local de notification est prévue pour chaque élément, si l'application est au premier plan lorsqu'une notification locale expire alors la vue de détail de l'élément est automatiquement affiché.
J'ai un problème qui se manifeste lorsque deux notifications expirent en même temps qui résultats dans les points de vue ne s'affichent pas correctement, et en plus les journaux de la console: "Déséquilibré appels de début/fin de l'apparence de transitions pour NNN" où NNN est mon détail-vue-contrôleur.
La table view controller) est créé comme suit:
self.tableViewController = [[TableViewController alloc] initWithNibName:@"TableView" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.tableViewController];
self.window.rootViewController = navController;
Lorsqu'une notification locale expire et didReceiveLocalNotification: est appelée l'application diffuse une notification à l'aide de NSNotifcationCenter postNotificationName: et pour lequel la table view controller est à l'écoute pour. Lors de la table-vue-contrôleur reçoit cette notification, il crée la vue de détail de contrôleur et il pousse à la pile:
[self.navigationController pushViewController:detailViewController animated:YES];
J'ai lu quelque part qu'il pourrait y avoir un problème si un view controller pousse un autre point de vue contrôleur quand il n'est pas sur le haut de la pile - j'ai donc pensé que ce doit être le problème, parce que lors de l'affichage de la table contrôleur reçoit le 2ème notification de ne plus être sur le dessus de la pile de navigation, car il aura déjà tout juste poussé une vue de détail du contrôleur sur la pile lors de la première notification d'arrivée.
J'ai donc changé le pousser code:
[[self.navigationController topViewController].navigationController pushViewController:detailController animated:YES];
Mais il ne fait aucune différence.
Donc ensuite, j'ai pensé qu'il pourrait y avoir un problème car le premier détail-vue-contrôleur n'a pas la chance d'afficher entièrement avant la 2e - vue-contrôleur a été poussé - et j'ai donc changé de notification de l'application affichage de l'aide:
[[NSNotificationCenter defaultCenter] postNotificationName:
pour
[[NSNotificationQueue defaultQueue] enqueueNotification: postingStyle:NSPostWhenIdle]
De sorte que la pousse ne pas se produire dans le même iteraction de l'application de la boucle. Mais cela ne fait pas de différence, ni ne tente d'introduire un retard à la poussée de la vue de détail 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];
});
Je n'ai aucune idée de ce que le problème est ou de ce à essayer ensuite, des idées?