J'ai une classe que j'ai écrite appelée Location qui contient juste quelques chaînes. J'utilise deux instances de cette classe dans un contrôleur de vue, et lorsque j'initialise les deux variables dans viewDidLoad, elles fonctionnent correctement pour cette méthode, mais lorsque j'essaie de les utiliser plus tard, elles sont nulles. Je les ai définis comme propriétés conservées. Je les ai testés et je sais qu'ils sont initialisés pour viewDidLoad (j'utilise leurs champs dans la vue). Dois-je faire quelque chose de spécial dans la classe Location pour m'assurer qu'ils ne seront pas publiés? Quand je les réinitialise dans une méthode différente, tout se passe bien.Pourquoi les variables initialisées dans viewDidLoad ne conservent-elles pas de valeur dans Objective-C?
Répondre
Les variables d'instance correctement initialisées dans viewDidLoad doivent normalement conserver des valeurs comme dans n'importe quelle autre méthode. Une erreur de codage peut provoquer le problème que vous décrivez, par ex. si vous avez des variables locales dans viewDidLoad en masquant des variables d'instance nommées de manière identique.
Vous (ou la boucle d'événements) relâchez probablement les objets que vous initialisez après la fin de viewDidLoad car ils sont auto-libérés ou quelque chose comme ça. Pour éviter cela, rendez les propriétés des variables en question dans la classe avec l'attribut "retain" et mettez-les à nil sur dealloc.
Cela ne les amènerait pas à devenir nul. – Chuck
- 1. Dans ObjectiveC, les pointeurs sont-ils des variables d'instance de classe initialisées à 'nil' ou non?
- 2. Variables non initialisées dans Fortran 2003
- 3. fonctionne dans viewDidLoad mais pas CellForRowAtIndexPath - pourquoi?
- 4. C++: Variables non initialisées garbage
- 5. Quelles sont les variables initialisées en Delphi?
- 6. Pourquoi la méthode viewDidLoad ne sera-t-elle pas exécutée?
- 7. Objectif C Json ne fonctionne pas dans viewDidLoad
- 8. Les limites UIScrollView n'ont pas encore été redimensionnées dans "viewDidLoad"
- 9. Pourquoi les propriétés ne sont pas déclarables dans les interfaces
- 10. Analyseur AMF0 dans ObjectiveC
- 11. Quand les variables statiques sont-elles initialisées en C#?
- 12. Personnalisation de writeToFile dans ObjectiveC
- 13. L'objet addSubview ne fonctionne que dans viewDidLoad
- 14. Pourquoi les variables locales ne sont-elles pas respectées?
- 15. Les variables delphi sont-elles initialisées avec une valeur par défaut?
- 16. Le tableau ne persiste pas en dehors de viewDidLoad
- 17. Pourquoi les variables ne sont-elles pas définies dans un include défini dans le tableau $ GLOBALS?
- 18. problème dans viewDidLoad..can j'appelle presentModelViewController dans viewDidLoad ..?
- 19. Pourquoi les variables de classe ne stocke pas de valeurs dans la classe php?
- 20. Pourquoi les variables d'environnement ne remplacent-elles pas les variables définies dans les fichiers makefiles par défaut?
- 21. Pourquoi les variables tee'd ne sont pas visibles dans les scripblocks plus récents?
- 22. La classe dans ObjectiveC ne semble pas reconnaître les messages hérités
- 23. Les variables non initialisées dans le code source 2d Android Gallery
- 24. iphone ne pas afficher les variables du tableau correctement
- 25. EXC_BAD_ACCESS dans viewDidLoad de FlipsideViewController
- 26. DataContractSerializer ne désérialise pas toutes les variables
- 27. Définition des propriétés UINavigationBar dans viewDidLoad ne fait rien
- 28. codes d'exécution dans viewDidLoad
- 29. Les variables d'instance ajoutées dans les rails d'aide ne sont pas disponibles dans les vues (modèles)?
- 30. ViewDidLoad pas la bonne commande
Que voulez-vous dire "plus tard"? Pouvez-vous donner un exemple concret? – jtbandes
Les configurez-vous avec self.variableName = ...? Si non, faites-le. Mais même s'ils sont sortis "tôt", il est difficile de voir pourquoi ils seraient mis à zéro. Les effacez-vous dans votre méthode viewDidUnload? Parce que cela peut être appelé à tout moment lorsque votre vue n'est pas visible. – Felixyz
Cela a fonctionné parce que '@property (retain)' est vraiment juste un raccourci pour les getters et setters générés. Vous avez probablement assigné un objet autoreleased à votre variable d'instance. Le définir à travers la propriété conserve sa valeur. – Justin