2010-11-02 3 views
1

Comment puis-je suivre 3 chaînes d'entrée en utilisant 1 UITextField?comment garder une trace de 3 chaînes d'entrée en utilisant 1 UITextField

Je bascule entre 3 types d'entrée différents (départs, compagnies aériennes, arrivées) en utilisant un champ UITextField pour la saisie par l'utilisateur. Je sauve chacun des 3 dans son propre objet NSMutableString comme celui-ci (en fonction de ce qui est entré ou autre):

depart = [input.text copy]; 
arrive = [input.text copy]; 
airline = [input.text copy]; 

i définir la valeur de l'aide de

input.text = [arrive copy]; 
input.text = [depart copy]; 
input.text = [airline copy]; 
UITextField (en fonction de ce que l'utilisateur entre dans)

Je suis en train de garder une trace de chacune des 3 entrées en utilisant input.text copy mais je vois des problèmes de fuite de mémoire lors de l'exécution d'un test Instruments pour les fuites. J'ai l'impression que c'est un résultat de mon nettoyage incorrect de l'utilisation copy. comment puis-je conserver chaque chaîne d'entrée et ne pas causer de problèmes de fuite de mémoire?

+0

L'utilisation de la méthode copy crée un nouvel objet au lieu de simplement conserver la valeur existante. input.text = [copie de compagnie aérienne]; est correct, car la valeur de .text est accessible via la propriété et la valeur précédente est libérée. airline = [Copie input.text]; provoquera une fuite de mémoire. – Justin

Répondre

1

Transformez vos chaînes en propriétés qui sont conservées.

@property (retain) NSString *airline; 

Définissez la valeur des propriétés à l'aide de self. Sans utiliser self, vous définissez manuellement la valeur et ignorez la propriété. Le texte n'est donc pas conservé.

libérer les objets dans votre - (void) Méthode dealloc

Ensuite, lorsque vous modifiez des informations spécifiques, vous pouvez utiliser les propriétés pour remplir le textField

input.text = self.airline; 

Est-ce sens?

+0

donc au lieu de '@property (nonatomic, retenez) NSMutableString * airline;' ce serait '@property (nonatomic, copie) NSMutableString * compagnie aérienne;'? – binnyb

+0

attendez, vous avez changé votre question autour, je ne suis pas sûr que ce soit ce que vous voulez – Justin

+0

non, vous êtes sur la bonne voie sans la chose de copie. attendre ma nouvelle réponse – Justin

1

L'outil de fuite devrait vous indiquer où se trouve la fuite.

Ici, c'est assez évident. Vous devez libérer les anciennes données avant d'en attribuer de nouvelles. Ainsi, tous les appels comme

depart = [input.text copy];

devrait être comme

[depart release]; depart = [input.text copy];

Aussi, vous devez release toutes les chaînes dans la méthode dealloc de la classe.

+0

l'outil de fuites indique que la fuite est dans la bibliothèque Foundations, ce qui est hautement improbable – binnyb

+0

D'accord, les fuites ne sont pas toujours précises. Valgrind est meilleur mais cela fonctionne seulement pour le simulateur. – Vladimir

Questions connexes