1

Je mettre en œuvre un système d'URL personnalisé dans mon application à base de navigation pour permettre aux utilisateurs d'importer des données à partir d'un e-mail, et j'ai donc cette méthode dans mon délégué app:Ignorer ou détruire tous les contrôleurs de vue, les feuilles d'action, etc.?

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 

Ce serait bien, si après l'importation les données de cette méthode, je pourrais utiliser popToRootViewController pour revenir à rootViewController pour montrer à l'utilisateur les nouvelles données. Toutefois, cela ne fonctionne pas si l'utilisateur a importé les données alors qu'un contrôleur de vue modale ou une feuille d'action était en cours (popToRootViewController ne les rejette pas et provoque le gel de l'application).

Est-il possible de rejeter/détruire en toute sécurité tous les contrôleurs de vue/feuilles d'action/vues d'alerte à l'exception de rootViewController?

Ou peut-être un moyen de dire à partir de mon délégué de l'application si l'utilisateur a une feuille d'action ou un contrôleur de vue modale en place? Ou, est-ce que je les laisse juste là où ils l'ont laissé, et ne donne aucune indication immédiate que les données ont été ajoutées avec succès?

Répondre

1

Vous devrez les suivre vous-même. Un moyen facile de le faire est de poster une notification, avec une référence à la vue modale/feuille/alerte dans le dictionnaire userinfo, chaque fois que vous affichez quelque chose de modal. Chaque fois qu'une vue modale est renvoyée, envoyez une notification différente. Observez les notifications dans le délégué de votre application (ou dans tous les cas où cela est utile, mais le délégué de l'application est le plus simple). Lorsque vous recevez le premier, stockez une référence (faible) à la vue modale et mettez à zéro la référence lorsque vous recevez la seconde. Entre les deux, vous pourrez répondre à -application:handleOpenURL: en ignorant la vue modale si votre référence est non-nulle.

Notez également que dans le cas d'alertes, il est probablement préférable de les ignorer lorsque vous entrez en arrière-plan. Les semaines peuvent s'écouler avant que vous ne soyez à nouveau mis au premier plan, et il est de mauvais style de saluer l'utilisateur avec «Êtes-vous sûr? OK/Annuler» quand il ne sait plus ce que vous lui demandez.

+0

Merci ... Je ne connais pas encore les notifications, mais je vais vérifier. Pour l'instant j'ai décidé de montrer juste un UIAlertView pour indiquer à l'utilisateur que de nouvelles données ont été ajoutées, et ne pas forcer l'utilisateur à revenir au contrôleur de vue racine. (qui, maintenant que je l'ai essayé, est peut-être mieux du point de vue des utilisateurs de toute façon) –