Si elle est effacée quand elle devient FirstResponder, je suppose que vous avez @property (nonatomic) BOOL clearsOnBeginEditing défini sur YES.
Peut-être, où que vous vous souciez de créer textField, ajoutez textField.clearsOnBeginEditing = NO; Si vous utilisez un constructeur d'interface, une case à cocher est présente dans les propriétés du champ de texte.
Quant à savoir pourquoi le plantage la plupart du temps ...
la propriété text est défini comme: @property (nonatomic, copie) NSString * texte
La copie signifie que lorsque vous attribuez une valeur à Il va libérer la valeur précédente, et ensuite faire une copie de la valeur transmise.
Votre première ligne vous gardez un pointeur autour de l'objet NSString sans appeler retenez-le. Ainsi, lorsque vous appelez la méthode getFirstResponder avec clearsOnBeginEditing est appelée, elle définit la nouvelle valeur sur un NSString vide, ce qui libère l'ancienne NSString à laquelle UITextField faisait référence. Puisque c'est la seule chose qui en a la propriété, cet appel de libération appellera dealloc sur NSString, l'invalidant.
Ensuite, vous réaffectez à la propriété text où il tente de copier l'objet qui a été libéré.
Donc, pour le faire de la façon dont vous l'avez, vous devrez appeler conserver et libérer:
NSString *tmpTxt = [textField.text retain];
BOOL result = [textField becomeFirstResponder];
textField.text = tmpTxt;
[tmpTxt release];
Cependant tout ce que vous devez faire est de définir clearsOnBeginEdit NO et vous ne aurez pas besoin de ce code.