2009-11-23 5 views
0

C'est vraiment embarrassant mais je suis resté bloqué pendant deux heures d'essais et d'erreurs.utiliser NSString dans une autre méthode?

Je déclare une NSString dans l'interface comme:

NSString *testString; 

Alors je l'ai fait une propriété et il synthétisé. J'affecter en viewDidLoad avec:

testString = [[NSString alloc] initWithFormat:@"thats my value: %i", row]; 

Si je veux obtenir la valeur de la chaîne dans une autre méthode, il retourne toujours (null). Donc la chaîne est vide, mais pourquoi? comment puis-je le rendre accessible pour chaque fonction à l'intérieur d'une classe? Donc, je ne veux pas faire une variable globale juste une « variable globale dans la classe »

Il est vraiment déroutant, car aussi longtemps que je le code je ne ai jamais rencontré ce problème :(

Merci beaucoup pour aider ! me

Répondre

3

Dans l'interface, déclare la propriété:

@property (nonatomic, readwrite, retain) NSString *testString; 

Dans la mise en œuvre, synthétiser:

@synthesize testString; 

Dans la mise en œuvre, ajoutez une version à la méthode -dealloc:

[self.testString release]; 

En -viewDidLoad, accéder à la propriété:

self.testString = [[[NSString alloc] initWithFormat:@"that's my value: %i", row] autorelease]; 
0

J'utilise personnellement

self.testString = [NSString stringWithFormat:@"my value: %i",row]; 

De cette façon, vous n Il ne faut pas s'inquiéter de le libérer.

Assurez-vous également de toujours utiliser "self".

+0

Merci! ET que se passe-t-il si je veux déclarer un nsstring dans viewcontroller1 et que je veux l'utiliser dans viewcontroller? J'ai pris le chemin avec appDelegate.viewcontroller1.testString mais qui retourne aussi (null) :( – user134282

+0

Est-ce que votre appDelegate ou viewController est aussi nul – Chris

+0

Comment puis-je tester cela? – user134282

0

vous pouvez essayer de conserver votre chaîne dans viewDidLoad. mais si cela fonctionne pour vous, n'oubliez pas de le relâcher une fois de plus

0

Toutes les autres réponses vous ont directement ou indirectement retain ing testString. Cependant, puisque vous obtenez testString avec un alloc et un init, il est déjà détenu par vous sans avoir besoin d'être à nouveau retain. Je pense que votre problème a quelque chose à voir avec autre chose. Vous libérez prématurément testString dans une certaine méthode, ou votre viewDidLoad n'a pas été appelé lorsque vous essayiez d'accéder à votre testString dans d'autres méthodes. Pour que vous puissiez utiliser une variable définie dans votre implémentation, vous n'avez pas à déclarer @property et @synthesize. Ceux-ci peuvent aider, mais vous n'avez pas à les avoir. Vous devrez peut-être nous montrer plus de code si ce problème ne disparaît pas.

Questions connexes