2011-08-22 8 views
0

Quelqu'un peut-il expliquer pourquoi ce code fonctionne parfaitement:stringWithFormat erreur Bad accès

int thumbnailPrefix = trunc([newGraph.dateCreated timeIntervalSinceReferenceDate]); 

newGraph.thumbnailImageName = [NSString stringWithFormat:@"%d.%@",thumbnailPrefix,@"png"]; 

Mais ce code provoque une erreur d'accès Bad?

newGraph.thumbnailImageName = [NSString stringWithFormat:@"%d.%@",trunc([newGraph.dateCreated timeIntervalSinceReferenceDate]),@"png"]; 

Répondre

2

trunc retourne un double, pas int.

double trunc(double x); 

Ainsi, dans le premier bloc de code que vous convertissez à un int et en utilisant correctement le spécificateur de format %d.

Dans la seconde, il doit s'agir d'un %f ou de (int) devant celui-ci.

newGraph.thumbnailImageName = [NSString stringWithFormat:@"%d.%@",(int)trunc([newGraph.dateCreated timeIntervalSinceReferenceDate]),@"png"]; 
+1

Ou, plus précisément,% d attend un argument de 32 bits et la ligne réseau renvoie un argument de 64 bits. Ainsi,% @ essaye de traiter la seconde moitié de la valeur de retour de trunc() comme un identifiant et ** Boom **. – bbum

+0

Ah, mon erreur. Je pensais que trunc renvoyait un entier. Merci d'avoir clarifié les gars. Ce site me donne plus d'informations que tous mes objectifs C réunis. – wayne

0

Avez-vous essayé typecasting le retour du tronc() comme ....

newGraph.thumbnailImageName = [NSString stringWithFormat:@"%d.%@",(int)trunc([newGraph.dateCreated timeIntervalSinceReferenceDate]),@"png"]; 

Il est un coup de feu dans l'obscurité, mais je pense NSString ne connaît pas le type de retour de la fonction trunc.