iOS 7 Avertissement d'erreur: Tentative de démettre de-vue-contrôleur <UINavigationController: 0x1568db40> alors qu'une présentation ou de les rejeter est en cours
J'ai des problème dans iOS 7 qui n'apparaît pas dans iOS 6.
J'ai une manette de navigation qui affiche une autre manette de navigation pour ajouter un employé. Cette deuxième contrôleur est présenté sous forme modale. Lorsque je rejette le deuxième contrôleur, soit avec un "Annuler" ou "ok", j'obtiens une erreur. Voici le message d'erreur:
QuickSchedule[880:60b] Avertissement: Tentative de démettre de vue
contrôleur alors qu'une présentation
ou de les rejeter est en cours!
Je suis à l'aide d'un dérouleur segue et la destitution de la première manette à l'aide de la suite de code.
C'est dans ScheduleViewController.m (Mon contrôleur principal de la fenêtre)
- (IBAction)done:(UIStoryboardSegue *)segue
{
if ([[segue identifier] isEqualToString:@"DoneEditing"]) {
[[MyManager sharedManager] saveChanges];
[self dismissViewControllerAnimated:YES completion:NULL];
}
}
La connexion dans la inspecteur pour le bouton "Terminé" est tout simplement
"action -> [détendez-vous fait:]"
Je n'avais pas d'erreurs avant la mise à jour de Xcode 5. Cela a commencé après la mise à jour de Xcode et mon storyboard pour iOS 7.
J'obtiens le même message d'erreur dans différents endroit dans mon application, mais encore une fois, c'est avec un modal présenté-vue-contrôleur.
Je vais de EmployeeViewController à AddEmployeeViewController modal. J'obtiens l'erreur à nouveau quand je reviendrai de AddEmployeeViewController.
EmployeeViewController.m
- (IBAction)done:(UIStoryboardSegue *)segue
{
if ([[segue identifier] isEqualToString:@"ReturnInput"]) {
AddEmployeeViewController *addController = [segue sourceViewController];
if (addController.employee) {
[[MyManager sharedManager] saveChanges];
[[self tableView] reloadData];
}
if (![self.presentedViewController isBeingDismissed]) {
[self dismissViewControllerAnimated:YES completion:nil];
}
}
}
- (IBAction)cancel:(UIStoryboardSegue *)segue
{
if ([[segue identifier] isEqualToString:@"CancelInput"]) {
[self dismissViewControllerAnimated:YES completion:NULL];
}
}
Ici est AddEmployeeViewController.m
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"ReturnInput"]) {
if ([self.firstNameField.text length] || [self.lastNameField.text length]) {
Employee *newEmployee = [[MyManager sharedManager] createEmployeeWithFirstName:self.firstNameField.text andLastName:self.lastNameField.text];
[[MyManager sharedManager] addEmployeeToList:newEmployee];
self.employee = newEmployee;
}
}
}
Je suis encore à apprendre, et j'ai cherché pendant des heures en ligne et ne peut pas trouver une réponse à cela. J'ai essayé de mettre le "sauvetage" du code de fin de bloc. Je l'ai mis en arrière et a tenté à l'aide de néant au lieu de NULL à la fin du bloc de l'argument. Comme vous pouvez le voir, j'ai néant en un seul endroit sur un achèvement bloc argument et la valeur NULL sur un autre. Peu importe ce que, l'erreur ne cesse d'apparaître.
Tout fonctionne jusqu'à une fonctionnalité, je viens d'obtenir cette erreur connecté à la console. Toute aide est grandement appréciée.
Note:
Je n'ai pas cette erreur régulière poussé les manettes de navigation. Ce n'est qu'il se passe sur rejetant modal présentés vue des contrôleurs.
Il est connecté à UIBarButtonItems Fait et Annuler sur mon AdEmployeeViewController, et UIBarButtonItem Fait sur la vue-contrôleur qui revient à ScheduleViewController.
OriginalL'auteur Darrell | 2013-09-19
Vous devez vous connecter pour publier un commentaire.
Je suis surpris que vous ne voyez pas ce même problème dans les précédentes versions de Xcode, parce que je pense que votre problème est d'appeler dismissViewControllerAnimated:achèvement: dans le "fait" de la méthode. Cela aurait été un problème dans iOS 6. Le déroulement des enchaînements ne le licenciement pour vous, alors vous ne devriez pas appeler cette méthode vous-même. Essayez de le commenter, et voir si cela résout le problème.
J'ai eu le même problème. Ma compréhension de storyboards au cours de iOS 6 vient de "Votre Deuxième Application iOS: les story-boards" dans le developer.apple.com/legacy/library/documentation/iPhone/... Dans le tutoriel (marqué comme "Non Recommandé" depuis iOS 7), tous les déroulements avait dismissViewControllerAnimated:achèvement: en eux.
Je ne suis pas sûr de ce qu'il se passe avec ce tutoriel, parce que vous le feriez normalement pas appel dismissViewControllerAnimated:achèvement: dans le contrôleur, vous allez de nouveau à -- tout comme vous ne l'appelez pas presentViewController:animation:réalisation d'une avant segue.
En fait, cette réponse n'est pas toujours vrai. Lorsque vous présentez un modal-vue-contrôleur à partir d'un UISplitViewController (Master ou de Détail), le déroulement suite ne pas ne le licenciement pour vous, de sorte que vous devez appeler dismissViewControllerAnimated détendez-vous dans votre méthode d'action. Mais, même alors, si vous n'avez que l'appel détendez-vous dans votre méthode d'action, vous aurez toujours l'erreur lors de l'exécution sur un iPhone avec iOS 7. J'ai essayé d'emballage l'appel dans une si vérifier: si !segue.sourceViewController.isBeingDismissed() {...}, mais isBeingDismissed() renvoie toujours false sur iOS 7 (iPhone). Clustermuck.
OriginalL'auteur rdelmar
J'ai eu ce même problème que dans iOS 7, trop.
Mon problème était d'appeler des méthodes qui travaille sur l'INTERFACE utilisateur (comme montrant
UIAlertView
etc.) sur leviewWillAppear:
méthode. C'était tout à fait tort parce que quand on vue a été rejeté, un autre point de vue a été apparaissant donc, les deux méthodes de l'INTERFACE utilisateur ont été appelés.J'ai déplacé mes méthodes de
viewDidAppear:
méthode et que le problème ait été corrigé.OriginalL'auteur kubilay
Vérifiez à nouveau votre code. Vous avez une animation qui n'a pas complètement terminé avant la cuisson un autre animation de transition. J'ai eu les mêmes problèmes et suivis à de multiples animations se chevaucher légèrement. Ensemble
dismissViewControllerAnimated:NO
et vous verrez ce que je veux dire.ScheduleViewController.m
est le seul endroit où je vois que l'animation particulière que l'on appelle. Même chose dansEmployeeViewController
. Je veux vraiment la Vue-Contrôleur à glisser vers le bas lorsque vous avez terminé.OriginalL'auteur Mark McCorkle
ici est la vraie réponse à cette question..! la plupart du temps vous le programmeur de ne pas prêter attention aux événements enum dans l'iOS d'apple sdk... si vous utilisez de tels événements [ UIControlEventAllEvent ] [UIButton] et exécuter un [dismissViewControllerAnimated] il est à noter que le [ UIControlEventAllEvent ] contient beaucoup d'autres événements et vous êtes en rejetant le point de vue avant la fin de tous les autres événements à l'intérieur du type enum [ UIControlEventAllEvent ] !! donc les gars si vous voulez juste un clic sur le bouton suffit d'utiliser [UIControlEventTouchUpInside] et il vous donnera cette erreur!!!
OriginalL'auteur Bob Godwin
Les avertissements de ce type spécifique de iOS7 et pas iOS6 ne se produisent dans d'autres situations. Dans mon cas, c'était par rapport à la révocation d'un e-mail d'alerte. Je n'ai eu qu'à ajouter la condition de la structure dans la méthode ci-dessous avec iOS7.
OriginalL'auteur David