2009-10-23 6 views
1

http://code.google.com/p/mwiphonesdk/source/browse/#svn/trunk/iMADE/PrepTasks/08 URL TéléchargerObjective-C: Comment ajouter une chaîne à un NSMutableString?

J'ai le code à l'endroit le lien ci-dessus et je me sers NSMutableString pour ajouter des chaînes en tant que données sont téléchargées. Mais je trouve qu'utiliser appendString n'augmente pas la longueur de la chaîne mutable. Je dois faire quelque chose de mal.

Et quand j'ai terminé, j'ai besoin de convertir NSMutableString en NSString pour le renvoyer. J'ai cherché des exemples pour le faire mais je n'en vois pas encore.

Je suis très familier avec Java et C# où il y a un StringBuffer/StringBuilder qui vous permet d'ajouter des pièces et les appelle simplement toString à la fin pour obtenir une chaîne. Cela ne semble pas aussi simple en Objective-C.

NSString* str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 

#pragma mark TODO Confirm this is appending a value to the mutable string 
[self.mutableString appendString:str]; 

NSLog(@"str length: %d, %d", [str length], [self.mutableString length]); 

Ci-dessus se trouve la section de code qui appelle appendString.

Je vois que str a une longueur> 0 mais l'appel de appendString n'augmente pas la longueur de self.mutableString.

Qu'est-ce que je fais mal ici?

+0

Avez-vous initialisé 'self.mutableString'? Essayez de le faire avec une variable locale 'NSMutableString' à la place. – notnoop

+0

Quand vous dites "augmente", voulez-vous dire "ne ** pas ** augmenter"? –

+0

Oui, il me manquait un non. Je pourrais essayer d'utiliser un local à la place, mais n'est-ce pas une variable d'instance? Il est utilisé par plusieurs méthodes. – Brennan

Répondre

7

Quant à avoir une NSMutableString* et avoir besoin de retourner un NSString*, le premier est une sous-classe de ce dernier afin partout où vous voyez un NSString* un NSMutableString* suffira en l'état.

Votre code semble OK à partir de ce que vous avez posté. La seule chose à laquelle je peux penser est qu'il n'y a peut-être pas de données à mentionner lors de l'initialisation de la variable str. Dans ce cas, l'ajout d'une chaîne vide ne fera rien à mutableString.

Vous devez également vous assurer que self.mutableString a été correctement alloué et initialisé. Vous pouvez envoyer des messages à NSObject* s qui sont nil qui peut être trompeuse lorsque [self.mutableString length] renvoie 0.

3

J'ai résolu le problème. Je n'étais simplement pas en train d'initialiser la valeur NSMutableString et il ne faisait rien de manière transparente.

Avant d'ajouter la chaîne j'ai mis le code suivant.

if (_mutableString == nil){ 
    _mutableString = [[NSMutableString alloc] init]; 
} 

Merci à tous pour votre réponse. Et il est bon de savoir que je peux utiliser NSMutableString à la place de NSString. (c'est trop facile) :)

+2

Il est préférable d'initialiser mutableString dans votre méthode 'init'. Sinon, vous obtiendrez des résultats inattendus ailleurs. – notnoop

Questions connexes