2010-08-09 3 views
-1

Je rencontre un problème avec une chaîne renvoyée par un service Web. Je règle la chaîne dans le fichier d'en-tête, simple aveciphone sdk nsstring comme objet - obtenir du texte

NSString *serviceUserID; 
@property (nonatomic, retain) NSString *serviceUserID; 

puis je le synthétise comme d'habitude. Je peux définir à l'aide

serviceUserID = @"4fffrdscfbg-44-06dfgf-dfgdfg-32eer456134"; 

mais quand il est réglé à l'aide du retour de service, il semble enregistrer un objet que je ne peux pas accéder plus tard. Ainsi, le code ne fonctionne pas au-dessous ...

NSLog(@"result = %@", result); 
serviceUserID = result; 

Le code ci-dessus sortie la chaîne serviceUserID à la fenêtre du journal, mais lorsque je tente de faire la même chose en dehors de cette fonction, il se bloque sans message d'erreur. Je n'ai aucune idée de quoi il s'agit. J'ai essayé de mettre la chaîne avec initWithFormat et toutes sortes, mais rien ne fonctionne !! J'ai juste besoin de définir la variable serviceUserID pour pouvoir l'utiliser dans d'autres fonctions ... est-il possible de définir le texte qui me manque?

Merci pour toute aide.

+0

En outre, votre propriété doit être déclarée comme 'copy', pas' retain' car elle traite avec NSString. –

Répondre

2

Vous devez conserver la valeur de chaîne que vous attribuez à votre iVar - dans votre exemple, vous attribuez vraisemblablement une chaîne validée qui devient invalide en dehors de la portée actuelle. Comme vous l'avez déclaré la propriété pour ce la bonne façon de le faire sera:

self.serviceUserID = result; 

La raison pour laquelle serviceUserID = @"4fffrdscfbg-44-06dfgf-dfgdfg-32eer456134"; fonctionne est que vous affectez ici littéral chaîne - il est créé à la compilation et ne soit pas publié du tout.

+0

Pour plus d'informations: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/ Lecture obligatoire pour tous les programmeurs Cocoa et Cocoa Touch. –

+0

Merci les gars - j'étais tellement confus quant à savoir pourquoi cela ne fonctionnerait pas. Ce qui est plus ennuyeux, c'est que je l'ai déjà fait dans d'autres projets - mais j'ai tout simplement oublié l'auto-assignation. Merci –

+0

bizarre ... J'utilise des cordes depuis plus d'un an maintenant et parfois rencontrer un problème comme celui-ci que je résous habituellement avec une méthode de la moitié du cul. J'ai pris le temps de le comprendre cette fois et voilà! Merci! – Louie

Questions connexes