2014-12-18 2 views
1

Я прокручиваю каждый актив в группе активов и пытаюсь найти местоположения из существующих данных изображений, используемых в Google Maps sdk 1.9.1. Вот код, который я написалGMSGeocoder iOS SDK - не получает обратный вызов при обратном геокодировании

-(NSString *) doRevGeoCodingForLocationWithLat:(double)lat AndLon:(double)lon { 
__block NSString *finalAddress = nil; 
GMSGeocoder *sharedInstance = [[GMSGeocoder alloc] init]; 
if (sharedInstance) { 
    dispatch_semaphore_t sema = dispatch_semaphore_create(0); 
    CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(lat, lon); 
    GMSReverseGeocodeCallback handler = ^(GMSReverseGeocodeResponse *response, NSError *error) { 
     if (!error && response) { 
      NSLog(@"Mil gaya"); 
      GMSAddress *firstAddress = [response firstResult]; 
      NSString *formattedAddress = nil; 
      if (firstAddress.locality) 
       formattedAddress = [NSString stringWithString:firstAddress.locality]; 

      if (firstAddress.administrativeArea) { 
       if (formattedAddress) 
        formattedAddress = [formattedAddress stringByAppendingFormat:@", %@", firstAddress.administrativeArea]; 
       else 
        formattedAddress = [NSString stringWithString:firstAddress.administrativeArea]; 
      } 
      if (firstAddress.country) { 
       if (formattedAddress) 
        formattedAddress = [formattedAddress stringByAppendingFormat:@", %@", firstAddress.country]; 
       else 
        formattedAddress = [NSString stringWithString:firstAddress.country]; 
      } 
      if (formattedAddress) { 
       finalAddress = [NSString stringWithString:formattedAddress]; 
      } 
     } 
     dispatch_semaphore_signal(sema); 
    }; 

    [sharedInstance reverseGeocodeCoordinate:coordinate completionHandler:handler]; 
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); 
} 
return finalAddress; 
} 

Проблема заключается в том, что обратный вызов completionHandler является никогда перезвонили из SDK. У меня установлена ​​консоль google APIs, а демонстрационное приложение в комплекте с sdk работает отлично.

Я прочитал из документации, что завершениеHandler вызывается в главной очереди приложения. Может ли проблема произойти, потому что эта операция происходит в параллельной очереди, которая перечисляет через активы? Любая помощь будет принята с благодарностью.

+0

Вы как-то уничтожаете (выпускаете) sharedInstance слишком рано? –

+0

Я использую ARC, поэтому нет ручного кода для уничтожения sharedInstance – IamRKhanna

+0

Как он определяется тогда? –

ответ

1

Arc сразу же освобождает вашу лояльную переменную Geocoder прямо сейчас, и асинхронные вызовы не могут продолжаться.

В качестве теста/взлома сделать sharedInstance глобальным, чтобы он поддерживался.

 Смежные вопросы

  • Нет связанных вопросов^_^