2010-11-15 16 views
0

Je rencontre un problème lors de l'obtention d'une chaîne qui a été convertie à partir d'un élément flottant pour l'afficher dans une cellule personnalisée dans un UITableView.Plantage du programme iPhone lors de la conversion de type float en chaîne

Le programme se bloquera si j'essaie d'affecter la valeur du flotteur à l'étiquette. Si je laisse "strAIAreaIncrease = @" 6,5% ";" non commenté, le programme fonctionne bien - mais sans la valeur calculée.

strAIAreaIncrease = [NSString stringWithFormat:@"%.2f",fltAreaIncrease]; 
strAIAreaIncrease = [strAIAreaIncrease stringByAppendingString:@"%"]; 
DebugLog(@"The value of float num is %.2f", fltAreaIncrease); 
DebugLog(@"The value of the string is %@", strAIAreaIncrease); 
// strAIAreaIncrease = @"6.5%"; 

La console Débogueur affiche les informations suivantes:

2010-11-14 19:52:38.122 Building Use[855:207] The value of float num is 2.50 
2010-11-14 19:52:38.123 Building Use[855:207] The value of the string is 2.50% 

Je l'ai utilisé ce format sur d'autres étiquettes de cellules personnalisées sans problème. Quelqu'un a-t-il une idée de ce qui se passe?

Merci.

+0

Il n'y a pas assez d'informations (http://tinyurl.com/so-hints). Comment assigner un flotteur à l'étiquette? Comment avez-vous personnalisé la cellule? Est-ce que votre code fonctionne avec une cellule de table standard? Quelle est la raison de l'accident est donné? Quelle est la trace de la pile? (les deux derniers peuvent être trouvés dans les [journaux de plantage] (http://developer.apple.com/library/ios/#technotes/tn2008/tn2151.html), [accessible via l'organisateur] (http: // stackoverflow .com/questions/2275190/iphone-app-crash-logs)) Nous avons vraiment besoin d'un [cas de test minimal] (http://sscce.org/). – outis

+0

"Comment affectez-vous un flotteur à l'étiquette?" - C'est tout le problème pour moi. J'essaye de changer le flotteur en chaîne pour l'obtenir à lire sur l'étiquette. Cette approche a fonctionné avec d'autres cellules dans le même programme, mais avec suffisamment de va-et-vient, ce programme va planter. Je pense que cela est dû à la fuite de mémoire que j'ai lu à propos de la mise à jour constante des chaînes. Je suis toujours en train d'en apprendre davantage sur les journaux de bord et approfondirai vos suggestions. Je vous remercie. – Aikitect

Répondre

0

Je pense que vous devriez utiliser à la place NSMutableString:

par exemple

NSMutableString* straIAreaIncrease 
    = [NSMutableString stringWithFormat:@"%.2f", fltAreaIncreas]; 
[strAIAreaIncrease appendString:@"%%"]; 
+0

Merci pour la réponse. Je ne l'ai pas encore essayé, mais j'apprends sur NSMutableString. Si ce que j'ai lu jusqu'ici est vrai, alors je peux avoir beaucoup de NSStrings pour passer à NSMutableStrings. Cela pourrait aussi expliquer quelques autres anomalies que j'ai connues récemment. Cela peut prendre quelques jours avant que je puisse mettre en œuvre ceci, et je rapporterai les résultats. – Aikitect

+0

@ user484340 (vous pourriez vouloir [vous donner un nom significatif] (http://tinyurl.com/so-hints): puisque l'application ne plante pas avec 'strAIAreaIncrease = @" 6.5% "', beaucoup le fait de douter de l'utilisation de NSMutableString sera utile, bien que je ne puisse pas en être certain sans voir un exemple de code plus complet, la raison de l'accident et la trace de la pile. – outis

+0

OK, j'ai un meilleur nom maintenant.Je suis nouveau à la programmation iPhone et je ne suis pas un professionnel - J'ai appris la programmation avec Visual Basic. faire beaucoup de changements de valeurs dans les chaînes et les tableaux ainsi que faire beaucoup de conversions entre les entiers et les flotteurs vers les chaînes.J'ai cherché un moyen de suivre la cause de l'accident et vous m'avez donné un indice - chercher la trace de la pile, mais je fais Je ne sais pas encore comment faire. Merci. – Aikitect

0

OK, j'ai essayé d'implémenter NSMutabeString sans succès. Il est évident que je manque une compréhension fondamentale de MSMutableString.

Je pense que la façon dont je le crée fait partie du problème. J'ai besoin de pouvoir passer la variable à plusieurs méthodes, donc j'essaye de la créer dans l'en-tête. Il semble que tous les exemples que je rencontre créent la chaîne dans une méthode.

Dans mon en-tête que j'ai:

NSMutableString *strAIAreaIncrease; 

Je pense que cela est une pert du problème et je pense que je dois lui attribuer une valeur, mais ne sais pas comment. La Console Debugger donne les éléments suivants:

2010-11-21 07:40:40.456 Building Use[1274:207] *** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: '+[NSMutableString string:]: unrecognized selector sent to class 0x2317c0' 

Une autre question est la suivante: Si je puis en utilisant la valeur MSMutableString dans un tableau, le tableau ne doivent être un tableau MSMutable?

Merci.

+0

Merci à tous pour vos réponses. Comme suggéré par certains des répondants, le problème n'était pas dans la chaîne. Cependant, j'ai beaucoup appris sur les mutablestrings et je vais migrer plusieurs de mes cordes vers des mutablestrings. Le vrai problème est décrit dans cette question: http://stackoverflow.com/questions/4246201/setting-final-string-values-of-arrays-in-voidviewwillappear-crash-vs-uitab – Aikitect

0

Le problème ne se trouve pas dans l'en-tête. Il semble que vous utilisez

strAIAreaIncrease = [NSMutableString string:@"someString"]; 

Mais il n'y a pas de méthode "string:" dans la classe NSMutableString. Essayez d'utiliser

strAIAreaIncrease = [NSMutableString stringWithString:@"someString"]; 

ou

strAIAreaIncrease = [NSMutableString stringWithFormat:@"someString %d", someInteger]; 

A propos de votre deuxième question: Non, vous ne devez pas utiliser un NSMutableArray, lorsqu'ils traitent avec NSMutableString. Le "Mutable" dans NSMutableArray signifie que vous pouvez ajouter et supprimer des objets du tableau après qu'il est généré.