2010-03-29 4 views
0

Le code suivant me cause quelques problèmes. La troisième ligne provoque un plantage du programme ... cela ne se produit pas la première fois que j'interviens mais d'une manière ou d'une autre dans le programme. Si je commente cette troisième ligne, le programme fonctionne bien.L'ajout d'une chaîne Objective-c provoque une exception

NSString *myRequestString = @"text"; 
int i = 1; 
myRequestString = [myRequestString stringByAppendingString:[NSString stringWithFormat: @"t=%d", i]]; 

ce code provoque cette exception:

*** -[CFString release]: message sent to deallocated instance 0xb4c43fe0

Sur une note de côté, quelqu'un peut me dire comment concaténer des chaînes en Objective-C comme une autre langue normale ... Je ne peux » Je crois qu'il n'y a pas d'opérateur de concaténation.

Toute aide est grandement appréciée.

+0

Vous savez, vous pouvez utiliser '-stringByAppendingFormat:'. – kennytm

+0

merci pour cette astuce, commuté, mais je reçois toujours l'exception. –

+0

Etes-vous sûr que l'exception provient de cette ligne ou est-elle ailleurs dans votre code? Cela indique que vous (ou quelque chose) appelle '[someString release]' après que 'someString' a déjà été désaffecté (ref count est 0). De plus, vous fuyez l'instance d'origine de 'myRequestString' car' stringByAppendingString' renvoie une nouvelle instance de 'NSString'. Vous pouvez corriger cela avec 'myRequestString = [[myRequestString autorelease] stringByAppending ......]' –

Répondre

0

Il semble que vous libérez myRequestString à un moment donné sans le retenir, ce qui n'est pas correct according to the memory management rules.

Et non, il n'y a pas d'opérateur de concaténation. Il n'y en a pas non plus en C non plus.

-1

Vous avez besoin d'un NSMutableString à faire:

NSMutableString *myRequestString = [[NSMutableString alloc] initWithCapacity:20]; 
[myRequestString appendString:@"text"]; 
int i = 1; 
myRequestString = [myRequestString appendFormat: @"t=%d", i]; 

Ne pas oublier: NSStringis immutable.

+2

Que voulez-vous dire "vous avez besoin de NSMutableString pour le faire"? NSString fonctionne très bien comme il le fait - il ne fera pas un ajout sur place, mais il fonctionnera très bien. Il ne gère pas correctement sa mémoire à un moment donné. Si vous utilisez un NSMutableString autoreleased, il explosera de la même manière. – Chuck

Questions connexes