1

iOS 7 introduit le balayage de bord pour revenir en arrière dans un contrôleur de navigation (tant que vous don't override the leftBarButtonItem, entre autres). Imaginez que j'applique une application similaire à Apple Notes. Dans l'application d'Apple, une fois que l'utilisateur appuie sur une note, il y a un bouton Précédent en haut à gauche et un bouton Terminé en haut à droite. Ce contrôleur de vue est automatiquement sauvegardé après la navigation de l'utilisateur. Même si l'utilisateur balaie vers l'arrière tout en éditant la note, il enregistrera automatiquement.Où implémenter le code de sauvegarde automatique lors de l'utilisation du balayage arrière de bord iOS 7?

Une façon d'implémenter ceci consiste à écrire sur le disque à chaque frappe de touche. Cependant, je suis à la recherche d'une implémentation plus efficace.

Quelle méthode devrais-je remplacer pour effectuer ma sauvegarde automatique?

Pour être clair, le code d'enregistrement automatique doit être invoquée dans ces trois cas:

  • L'utilisateur tape sur le bouton Retour
  • L'utilisateur Swipes en arrière
  • L'utilisateur tape le bouton Terminé

Répondre

1

jusqu'à présent, je me suis mis en œuvre la logique enregistrer dans viewWillDisappear, ce qui minimise les quantités d'écritures, et prend également soin de s ave si l'utilisateur tue l'application.

De plus, au lieu de mettre en œuvre dans la logique de sauvegarde sur le bouton Terminé, le bouton Terminé peut simplement appeler:

[self.navigationController popViewControllerAnimated:YES]; 

... (par exemple, par un délégué, ou détendez-vous Segue) et il enregistre automatiquement aussi bien . Les trois chemins de code passeront par viewWillDisappear.

Bien qu'il puisse techniquement être implémenté dans viewDidDisappear, si le contrôleur de vue précédent doit afficher les données mises à jour, cette méthode sera trop tardive.


Pour les contrôleurs plus de vue complexes (par exemple, ceux qui ont un comportement destructeur une fois que le contrôleur de vue est rejeté), il y a plusieurs autres choses à considérer:

  1. Si la sauvegarde est appelé si un modal est présenté ci-dessus le contrôleur de vue en cours? (Par exemple, dans Apple Notes, imaginez que le bouton de partage a lancé un modal, doit-il être sauvegardé lorsque vous appuyez sur ce bouton?). S'il est important de ne pas enregistrer pour le moment, vous pouvez lire la valeur presentedViewController. S'il a une valeur, cela signifie que viewWillDisappear est appelé car un modal est présenté au-dessus.
  2. La sauvegarde doit-elle être appelée si un contrôleur de vue est enfoncé dans la pile de navigation actuelle? (Par exemple, dans Apple Notes, si le bouton de partage utilisait un push au lieu d'un modal, devrait-il enregistrer?) You can check la valeur de isMovingFromParentViewController dans ce cas.
  3. Si l'utilisateur appuie sur le bouton principal pour quitter votre application, devrait-il enregistrer?
  4. Si l'utilisateur commence à glisser vers l'arrière, annule le balayage pour rester sur l'écran en cours, devrait-il enregistrer?Imaginez-vous que le contrôleur de vue est dans un modal, lorsque le modal est rejeté si l'action destructive se produit? Vérifiez isBeingDismissed dans ce cas.
  5. Comme ci-dessus, mais imaginez que le contrôleur de vue est la deuxième page dans un contrôleur de navigation que ce qui est présenté.