2009-12-21 10 views
0

Je ne peux pas vivre un autre jour sans savoir pourquoi cela se produit. J'ai une application iPhone en utilisant CoreLocation et voici la question:IPhone Float to String numéro

GPSLocation.m - envoie latitude/longitude coordonnées qui sont flotteurs à la classe UserSettings.m (ce qui est une classe singleton )

_

UserSettings.m - Rabattre ensuite les valeurs dans une des chaînes prédéfinies d'un flotteur

par exemple. strLongitude = [NSString stringWithFormat: @ "% f", paramLong];

Je peux tracer la chaîne juste bien NSLog (@ "Chaîne de longitude est% @", strLongitude);

Quelques notes sur strLongitude

  1. est dans le fichier d'en-tête
  2. propriété est définie comme (nonatomic, retain)
  3. est synthétisé

Maintenant le problème: Lorsque j'ai besoin de cette variable dans une autre classe, je peux utiliser l'une des deux méthodes pour l'obtenir. Soit par un getter [UserSettings getLongitude] ou accéder à la propriété [UserSettings strLongitude]

Ensuite, quand je trace ensuite cette chaîne, je reçois parfois une erreur badaccess ou une poubelle aléatoire. Si je trace la chaîne comme un float% F cela fonctionne très bien.

Pourquoi cela se produit-il? La chaîne retourne par défaut au type de données d'origine de la variable.

Toute aide serait appréciée.

Répondre

2

strLongitude doit être conservé.

+0

est! @property (nonatomic, retain) NSString * strLongitude; –

+1

Mais vous devez utiliser self: self.strLongitude = [NSString stringWithFormat: @ "% f", paramLong]; pour invoquer le setter (qui le conserve). Juste pour les coups de pied, essayez: strLongitude = ...; [strLongitude conserver]; et voyez s'il y a une différence. – Jeff

+0

BINGO! Je n'ai pas invoqué le setter. self.strLongitude a très bien fonctionné. Merci mec! –

1

Il semble qu'un code appelle accidentellement l'accesseur de chaîne avec un argument float.

1

Je réalise que cela ne répond pas directement à votre question, mais pourquoi stocker les coordonnées dans les chaînes? Pourquoi ne pas les entreposer comme si, bien, les flotteurs? Par exemple,

@interface UserSettings 
{ 
    float longitude; 
} 

@property (nonatomic, assign) float longitude; 

@end 

En outre, votre classe UserSettings semble très similaire à NSUserDefaults ...

+0

Je ne peux pas faire un POST pour les services Web avec un flotteur. Donc, juste avant de faire cet appel, j'apporte le float dans la classe im en faisant l'appel de webservices avec, puis le convertir en une chaîne. Oui, je peux remplacer ma classe userSettings par NSUserDefaults mais cela ne répond pas à ma question. Cette programmation de bas niveau est nouvelle pour moi et j'essaie de comprendre pourquoi ce problème se produit. –

+0

Jusqu'ici, j'ai déterminé que la distribution est relative à la classe dans laquelle je l'ai lancé. Si j'essaie d'accéder à la variable d'une classe différente, elle ne conserve pas son type de données de lancement mais retourne à son original. Qui sait que je suis tout mucked sur cela. Je veux juste savoir pourquoi. –