2011-04-04 2 views
0

J'ai actuellement le code suivant:NSMutableString aider Objective C

-(void) inputNumber:(int)number { 

    NSString *str; 

    str = [NSString stringWithFormat:@"%d", number]; 
    [strVal appendString:str]; 
    txtShowNum.text = strVal; 
} 

Je l'ai déjà défini NSMutableString * strVal; avant dans mon code.

Lorsque la fonction exécute au-dessus du champ reste vide, mais si je devais utiliser:

txtShowNum.text = str; 

je reçois la valeur que je voulais mais j'ai besoin de toute évidence la valeur concaténée.

Quelqu'un peut-il faire la lumière sur ce point.

Merci

+0

Quand vous dites défini, voulez-vous dire qu'il a été initialisé ou simplement déclaré? Comme: NSString * strVal = @ ""; ? – kailoon

Répondre

0

Vous devez allouer un NSMutableString aussi bien dans votre code, quelque part avant que cette méthode est appelée.

E.g. comme ceci:

-(void) inputNumber:(int)number { 
    if (strVal == nil) strVal = [[NSMutableString alloc] init]; 
    NSString *str = [NSString stringWithFormat:@"%d", number]; 
    [strVal appendString:str]; 
    txtShowNum.text = strVal; 
} 

Il y a cependant quelques problèmes de mémoire ici. Vous feriez mieux de faire strVal un bien conservé, puis faites:

if (self.strVal == nil) self.strVal = [NSMutableString string]; 
+0

Cela semble avoir résolu le problème d'une sortie, mais maintenant, lorsque la méthode est appelée à nouveau, il bloque simplement l'application. Y at-il quelque chose dans ce code qui va planter l'application? –

+0

Si la chaîne n'est pas conservée, ce code plante l'application. Avez-vous une ligne indiquant '@property (nonatomic, retain) NSMutableString strVal;' dans votre en-tête, et utilisez-vous 'self.strVal = ...'? Ensuite, il ne devrait pas tomber en panne. – mvds

+0

Merci, c'est ce que le problème était, il faut aussi @synthesize dans l'implémentation, juste une note si quelqu'un d'autre vient à lire cette question. –

0

Votre strVal est très probablement nil, de sorte que vous appelez appendString: sur zéro qui fait essentiellement rien du tout, et définissant le champ de texte à zéro effaceras son Contenu.

-4

Si vous venez de déclarer comme une variable membre, assurez-vous lsinitialisez quelque part:

NSMutableString * strVal = @ "";

Sinon, vous êtes juste appeler une méthode sur un objet nul.

+0

-1, '@" "' est un NSString alloué statiquement, pas un NSMutableString. – mvds

+0

Oui, vous avez raison. J'ai posté ceci hâtivement. Il doit être NSMutableString * strVal = [NSMutableString alloc] init]; – kailoon

+0

Ce qui conduira à une fuite de mémoire si elle n'est pas gérée correctement, mieux utiliser '[Chaîne NSMutableString]' pour la rendre autoreleased. (ou ajoutez un appel à 'autorelease') – mvds

Questions connexes