2010-09-11 5 views
1

Continuez à obtenir EXC_BAD_ACCESS. Ran NSZombieEnabled et est venu avec rien.CoreLocation se bloque sur le périphérique mais pas sur le simulateur

Dans la console simulateur:

2010-09-11 23:39:56.876 [19072:207] 1.309789, lat, 103.772196, lon 

Dans la console de l'appareil:

EXC_BAD_ACCESS 

La ligne de code:

NSLog(@"%f, lat, %f, lon",latitudeString,longitudeString); 

Que CLManager fait:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
NSLog(@"Entering mlocationmanager did updatetolocation"); 
    latitudeString = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude]; 

    longitudeString = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude]; 

    NSLog(@"lat %@ long %@", latitudeString, longitudeString); 
NSLog(@"%@",newLocation.description); 
if (latitudeString.length >0 && longitudeString.length > 0){ 
    NSLog(@"Yes both are more than 0"); 
    locationIsReady = YES; 

} 
[self.tableView reloadData]; 
} 

Que se passe-t-il ici? Les deux variables sont dans mon fichier d'en-tête et CLLocationManagerDelegate est conforme à. J'y ai travaillé pendant quelques heures, mais pas de chance. J'espère que vous pouvez aider.

NSString *latitudeString; 
NSString *longitudeString; 

Répondre

1

La ligne de code devrait en effet être votre coupable:

NSLog(@"%f, lat, %f, lon",latitudeString,longitudeString); 

L'argument format NSLog correct pour les objets Objective-C est %@. %f est pour les nombres à virgule flottante.

1

Enfin fixé après un long moment. Il m'a fallu du temps pour réaliser que NSXMLParser remplaçait certaines de mes variables (je ne sais pas pourquoi). Donc à la fin, j'ai appelé CLLocationManager après que mon XML ait été analysé. Problème résolu.

+2

Vous n'avez aucune idée pourquoi vous avez donc déplacé du code autour et maintenant il arrive juste de travailler. Je pense que tu ferais mieux de trouver la vraie cause. –

+0

Votre code fait définitivement quelque chose de mal; vous avez probablement déplacé le crash ailleurs. –

2

Vous n'avez vraiment pas besoin de convertir newLocation.coordinate.longitude en NSString pour l'imprimer. Utilisez simplement %f dans la chaîne de format pour les imprimer.

Aussi, lorsque vous écrivez:

if (latitudeString.length >0 && longitudeString.length > 0) 

Vous comparez la longueur des cordes, qui toujours être supérieur à zéro. BEcause si la longitude ou la latitude est zéro, la chaîne convertie sera @"0.0" et aura une longueur de 3. Je soupçonne ce que vous voulez vraiment ici est:

if (newLocation.coordinate.latitude != 0.0 
    && newLocation.coordinate.longitude != 0.0) 
+2

(0,0) est une coordonnée parfaitement valide cependant; il se trouve juste quelque part dans l'océan. –

Questions connexes