Je suis novice dans Swift et Xcode alors s'il vous plaît, veuillez me pardonner le code probablement vraiment désordonné! Lorsque vous courez mon code, je reçois l'avertissement suivant: AVERTISSEMENT: tentative de présenter qui présente déjà
J'ai déjà vérifié le forum et j'ai trouvé un message concernant ce problème ... J'ai appliqué l'aide suggérée comme dans: p> Cependant, cela me donne toujours le même avertissement ... alors je suppose que je devais avoir fait quelque chose de mal là-bas. Ce serait génial si quelqu'un pouvait m'aider s'il vous plaît :) également s'il y a une suggestion sur la manière dont je peux "nettoyer" mon code est apprécié :) p>
6 Réponses :
Vous devez modifier votre code comme celui-ci, présentez la deuxième alerteController à la fin du renvoi. Changez également votre condition If avec mon seul. J'espère que cela vous aidera. P> P>
Hé, merci beaucoup pour votre réponse! Cela fonctionne cependant, il semble que la fenêtre d'alerte apparaisse deux fois plus vite, j'ai essayé de le réparer mais je ne suis pas sûr de savoir comment ... a-t-il quelque chose à ce qu'il entrait deux fois dans une boucle ou quelque chose?
Je ne comprends pas ce que vous essayez de dire pouvez-vous expliquer un peu plus?
Si je fais glisser Drop le symbole correct sur l'étiquette, la boîte d'alerte s'ouvre deux fois dans une rangée de succession rapide (c'est-à-dire "AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL ALLER" POPS SUR LE DOCUMENT ET SUPPORTEMENT VRAIMENT VRAIMENT RAPIDE). Mon explication a-t-elle plus de sens maintenant? Il est vraiment difficile d'expliquer ... il s'ouvre simplement, ferme et rouvre rapidement
Pouvez-vous faire une vidéo ou un gif et me montrer de sorte que ce sera utile.
Comment puis-je envoyer un gif / vidéo ici? Est-il possible de vous envoyer un message privé ici?
Cela se produit sur une mauvaise réponse également non seulement correctement. Je pense que le problème est que votre méthode appelle deux fois, je pense que vous pouvez vérifier qu'à utiliser breakpoint code>. Vérifiez et confirmez ici
La cause semble être "Self.PresentViewController (AlertController, animée: True, Achèvement: NIL)" Dans la déclaration "Autres". Je ne sais pas comment se déplacer autour de ça.
Le message est identique à la fois des fois, donc je pense que vous n'avez pas besoin d'écrire une partie, il suffit d'ajouter l'alerteController, s'il n'est pas présenté.
Oui, j'ai essayé de l'utiliser sans la déclaration d'autre, mais cela me donne l'avertissement: "Tentative de charger la vue d'un contrôleur d'affichage lorsqu'il est annoncé n'est pas autorisé et peut entraîner un comportement non défini"
Je dis simplement utiliser si condition présentéeviewcontroller == nil code> puis présentez le contrôleur. Il n'est pas nécessaire d'écrire une partie d'autre.
C'est ce que j'ai fait. Je viens d'utiliser si présentéviewcontroller == nil {self.presentviewcontroller (AlertController, animée: true, achèvement: nil)}
Avez-vous essayé de mettre la pause? Je pense que votre méthode appelle deux fois.
Je tente actuellement. Je vous ferai savoir si j'ai trouvé quelque chose.
Ok j'ai essayé des points de pause à plusieurs endroits .... Sans succès ... il semble que le problème soit la déclaration "sinon" ... mais comme je l'ai dit si je le laissais sortir, je vais avoir l'avertissement "... DealLocating n'est pas autorisé ... "...
Cette guerre, vous devriez ignorer le chèque de ce Link
Il vous donne parce que vous ne présentez pas l'alerteview après l'initialisation. Si vous souhaitez supprimer cette erreur, essayez quelque chose comme celui-ci si présentéviewcontroller == nil { code> puis créez l'instance d'alerteController et présentez-la.
ahhhhhh !!!! Ouais c'était le problème !!! Merci beaucoup :) maintenant sa course parfaitement bien :)
Et si la première VC est une alerte? Nous ne voulons pas qu'il soit automatiquement rejeté tout de suite
@Danispringer Désolé de ne pas vous avoir, pouvez-vous donner plus de détails sur votre question?
Sûr. J'essaie d'afficher un contrôleur d'affichage d'alerte et un contrôleur d'activité juste après cela, dès que l'alerte est rejetée. En utilisant le code indiqué ci-dessus, l'alerte est affichée un instant et immédiatement rejetée automatiquement. (Si vous voulez, voir les derniers commits pour cela: github.com/danispringer/mememe1.0/blob/Master/Mememe1.0/... )
@Danispringer J'ai vérifié le code mais ce que je ne reçois pas, c'est pourquoi vous présentez un indicateur d'activité et d'alerter le contrôleur d'alerte l'un après l'autre. C'est pourquoi cela pourrait être un contrôleur d'alerte sur l'indicateur d'activité
Je veux laisser l'utilisateur savoir si l'image a été enregistrée. Par exemple: ils ouvrent AVC, appuyez sur Enregistrer, demandez la permission d'accéder à la photothèque et de refuser l'accès. Au lieu du message d'erreur d'alerte par défaut "Données indisponibles", je voudrais présenter une alerte personnalisée, avec un message humain et un lien vers l'application Paramètres. L'alerte elle-même a travaillé comme prévu, mais dès que j'ai essayé de l'ajouter à l'AVC, elle s'est arrêtée. J'ai mis à jour le code un peu donc si vous pourriez prendre un autre look, cela pourrait aider (au moins, pour comprendre ma logique). Merci!
Essayez ceci
Super! Mise à jour: "RetirerFromcarrent ViewController ()" est modifié en "Present.Removefromparent ()"
Vous pouvez présenter une autre uialertController ou tout ce que vous voulez de l'uialertController actuel présenté.
Créez une Helper Func pour obtenir le top ViewController visible, puis faites un appel actuel sur ce
J'apprécie le licenciement des alertes mentionnées dans toutes les réponses. Mais personnellement, je ne préférerais jamais de rejeter quelque chose que je ne voulais pas conjurer en premier lieu. Par conséquent, si nous pouvions simplement regarder pourquoi plusieurs alertes sont générées en premier lieu, ce serait génial.
Utiliser uigesurerecogniser code> pour générer uialert est délicat. Les gestes envoient des messages dans tous leurs états sous-jacents. Par exemple: Si ci-dessous est mon code: P>
@objc func deleteSelectedProfile(_ sender: UILongPressGestureRecognizer) {
if sender.state == .began {
let alert = UIAlertController(title: "Delete Profile", message: "Word!" , preferredStyle: .alert)
let deleteAction = ...
alert.addAction(deleteAction)
let cancelAction = ...
alert.addAction(cancelAction)
present(alert, animated: true, completion: nil)
}
}
Voici comment je déboque cette erreur dans SWIFT 4.2:
let alert = UIAlertController(title: "Oops!", message: "No Internet Connection", preferredStyle: .alert) let alertAction = UIAlertAction(title: "OK", style: .default) alert.addAction(alertAction) if let presented = self.presentedViewController { presented.removeFromParent() } if presentedViewController == nil { self.present(alert, animated: true, completion: nil) } }
Essayez ceci:
[self dismissViewControllerAnimated:YES completion:nil]; UIAlertController *alertResync = [UIAlertController alertControllerWithTitle:@"Warning" message:@"Warning Warning" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *softResyncButton = [UIAlertAction actionWithTitle:@"No, keep Some" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]; UIAlertAction *hardResyncButton = [UIAlertAction actionWithTitle:@"Yes" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) { [self testFunc]; }]; [alertResync addAction:softResyncButton]; [alertResync addAction:hardResyncButton]; [self presentViewController:alertResync animated:YES completion:nil];