Note that there are some explanatory texts on larger screens.

plurals
  1. POGeocode + MKPointAnnotation not playing nicely
    text
    copied!<p>I'm having the weirdest issue, and it's doing my head in. A global variable which I've set up within a Singleton is reporting correctly from within the function it's set in, then as NULL from within the very next function (which is where I need to access it), but as correct from another View! So the variable is correctly set, but it's not behaving within a certain function. There is also a weird error warning being generated by the offending line (which I've marked between <em>*</em>).</p> <p>The warning is: </p> <pre><code>Property access result unused - getters should not be used for side effects. </code></pre> <p>Apologies for the very spotty code. I'm prototyping and learning as I go, so it's a mishmash of things I've cobbled from the net. What the code does is recognise a long tap on a mapview, and then places a pin at the location (while recording the location), and I'm trying to use Geocode to show the address at the pin position.</p> <p>The first function is as follows:</p> <pre><code>- (void)handleLongPress:(UIGestureRecognizer *)gestureRecognizer { if (gestureRecognizer.state != UIGestureRecognizerStateBegan) return; CGPoint touchPoint = [gestureRecognizer locationInView:self.fullMapView]; CLLocationCoordinate2D touchMapCoordinate = [self.fullMapView convertPoint:touchPoint toCoordinateFromView:self.fullMapView]; //save new birthplace in global variable globalsSingle.gblBirthplace = touchMapCoordinate; //place user location and record it MKUserLocation *location = fullMapView.userLocation; globalsSingle.gblCurrentLocation = location.coordinate; //first remove any previous birthplace pin [self removeAllPinsButUserLocation]; [self reverseGeocode]; //place new birthplace pin MKPointAnnotation *birthPlacePin = [[MKPointAnnotation alloc] init]; birthPlacePin.coordinate = touchMapCoordinate; birthPlacePin.title = @"My Birthplace"; **** birthPlacePin.subtitle = @"%@", globalsSingle.gblAddress; **** [self.fullMapView addAnnotation:birthPlacePin]; NSLog(@"gblAddress = %@", globalsSingle.gblAddress); } </code></pre> <p>The above function calls the next:</p> <pre><code>-(void)reverseGeocode { CLGeocoder *ceo = [[CLGeocoder alloc]init]; CLLocation *loc = [[CLLocation alloc]initWithLatitude:globalsSingle.gblBirthplace.latitude longitude:globalsSingle.gblBirthplace.longitude]; //insert your coordinates [ceo reverseGeocodeLocation: loc completionHandler: ^(NSArray *placemarks, NSError *error) { CLPlacemark *placemark = [placemarks objectAtIndex:0]; //String to hold address NSString *locatedAt = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "]; // save the address text globalsSingle.gblAddress = locatedAt; NSLog(@"addressDictionary %@", placemark.addressDictionary); NSLog(@"placemark %@",placemark.region); NSLog(@"placemark %@",placemark.country); // Give Country Name NSLog(@"placemark %@",placemark.locality); // Extract the city name NSLog(@"location %@",placemark.name); NSLog(@"location %@",placemark.ocean); NSLog(@"location %@",placemark.postalCode); NSLog(@"location %@",placemark.subLocality); NSLog(@"location %@",placemark.location); //Print the location to console NSLog(@"I am currently at %@",locatedAt); NSLog(@"gblAddress from reverse Geocode = %@", globalsSingle.gblAddress); } ]; } </code></pre> <p>What's even weirder (to me) is that the NSLog's from within reverseGeocode are all printing correctly, but the NSLog from the first function is reporting NULL, and is printing before the one from reverseGeocode even though it's (I assume) being executed second! For example, a debug output is:</p> <pre><code>2013-05-21 23:41:04.662 Project Name[5659:c07] gblAddress = (null) 2013-05-21 23:41:04.808 Project Name[5659:c07] gblAddress from reverse Geocode = Januária - MG, Brazil </code></pre> <p>Any help anyone could be bothered to offer I'd appreciate, as I'm bamboozled :)</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload