2012-02-20 4 views
0

Scénario:Comment transmettre des données d'un View Controller à un autre dans un Storyboard lors d'un retour?

  • scénarimage avec UINavigationController en tant que contrôleur initial.
  • MainVC (racine du contrôleur de navigation vc) a besoin de l'utilisateur pour choisir un emplacement sur une carte.
  • MainVC pousse un VC contenant une carte MapKit et ajoute lui-même en tant qu'auditeur pour une notification que le MapVC envoie lorsque l'utilisateur choisit un emplacement.
  • MapKit est un cochon de mémoire, nous le savons tous. iOS me donne un avertissement de mémoire, je fais tout ce qui doit être fait, puis iOS libère tout ce qu'il peut désallouer, y compris le MainVC.
  • MapVC envoie la notification mais personne ne l'écoute. L'emplacement choisi par l'utilisateur est perdu, comme les larmes sous la pluie.

Étant donné cela, quel est un moyen fiable de transmettre ces données de localisation lorsque vous revenez à MainVC? J'ai même pensé à l'écrire à ~/tmp (ce que j'ai l'habitude de faire pour traiter une grande quantité de données comme des images) mais cela semble être un gaspillage de machines. N'y a-t-il pas un mécanisme auquel je peux m'accrocher, comme un événement déclenché quand le contrôleur de navigation retourne à la VC précédente? Comme, avoir accès à quelque chose comme le prepareForSegue: mais dans la direction opposée serait bien.

EDIT J'ai essayé d'aller en délégation mais il semble que mon délégué soit quand même sorti. Suis-je obligé d'écrire à ~/tmp?

+0

est le chemin à parcourir - il semble que vous avez un problème avec votre objet délégué étant désalloué? – petert

+0

Je peux seulement ajouter que si je commente le [super didReceiveMemoryWarning] dans le MainVC (qui est maintenant le MapVC.delegate) il ne se libère pas. Je pense que cela est considéré comme un mauvais comportement. – Morpheu5

Répondre

0

Voir ma réponse ici pour une explication détaillée de la mise en place d'un délégué et protocole délégué - Délégation here

+0

Ok, le délégué travaille et est maintenu même après un avertissement de mémoire. Le mystère est maintenant: pourquoi les champs et les boutons que j'ai dedans ne gardent pas leurs valeurs et leurs états? Plus précisément, j'ai un UITextView avec du texte qui est effacé, et certains boutons qui devraient être mis en surbrillance/activé, mais ils ne le sont pas. – Morpheu5

+0

Aussi je peux confirmer que ces champs gardent leurs valeurs correctes et les statuts activés/en surbrillance, ils ne sont juste pas montrés quand le MapVC est sauté. – Morpheu5

+0

Je ne comprends pas le nouveau problème. J'ai une suggestion. Acceptez cette réponse, convertissez-la en ARC pour résoudre vos problèmes de mémoire et rédigez une nouvelle question avec vos problèmes restants. Pour convertir votre projet en ARC dans Xcode, sélectionnez "modifier" puis "refactor" et enfin "Convert to ARC". Prenez d'abord un instantané de votre projet avec "file" "create snapshot" au cas où la conversion a des problèmes. –

Questions connexes