2015-04-04 1 views
0

Im создает небольшое приложение, которое считывает некоторые данные с веб-сервера, и это работает finde. Затем я сделал метод, который является недействительным, и только получает широту и долготу от некоторого адреса.Объект C метод geoLocation не возвращает двойное значение автоматически

-(void)getLocation{ 



if (!self.geocoder) { 
    self.geocoder = [[CLGeocoder alloc] init]; 
} 


NSString *address = self.label1.text; 



[self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) { 



    if ([placemarks count] > 0) { 
     CLPlacemark *placemark = [placemarks objectAtIndex:0]; 
     CLLocation *location = placemark.location; 
     CLLocationCoordinate2D coordinate = location.coordinate; 

     latitude1 = coordinate.latitude; 
     longitude1 = coordinate.longitude; 

    } 

}]; 
} 

в файле .h я объявил их к переменным (не в интерфейсе):

@property double latitude1; 
@property double longitude1; 

я тогда называю это с помощью кнопки:

- (IBAction)find:(id)sender{ 

NSLog(@"Latitude1: %f og Longitude1: %f", latitude1, longitude1); 


float spanX = 0.00725; 
float spanY = 0.00725; 
MKCoordinateRegion region; 

region.center.latitude = self.latitude1; 
region.center.longitude = self.longitude1; 

region.span = MKCoordinateSpanMake(spanX, spanY); 
[self.mapView setRegion:region animated:YES]; 

} 

Это отлично работает мелкий ....

, но я просто не могу назвать это:

NSLog(@"Latitude: %f and %f",latitude1, longitude1); 

с точки зренияDidLoad метод.

Его как я должен использовать его в IBaction, и что я не могу использовать latitude1 и longitude1 любым другим способом. Мне нужно принять широту и долготу и иметь возможность использовать значения, как я хочу, а не только нажатием кнопки.

Это просто не имеет смысла, что он работает, если я вручную нажимаю кнопку обновления, тогда он показывает вещи на карте и отображает широту и долготу, но когда я использую его в методе viewdidload, он просто отображает 0.00000 ,

еще одна вещь, о которой я думал, - это как вернуть несколько значений из одного метода, например, я хочу вернуть latitude1 и longitude1 из моего метода getLocation. nsdictionary или array или struct?

ответ

0

Ваш образец кода не является полным, но вот мой совет.

Установка точки останова на эту ссылку кода:

 if ([placemarks count] > 0) { 

Если блок Geocoder терпит неудачу, вы будете иметь значение 0 для местоположения.

+0

это то, что возвращается: latitude1 \t \t двойного 0 longitude1 \t \t двойного 0 \t – uba2012

+0

0, так что кажется, что в точке разрыва блок ничего от Геокодера – uba2012

0

Я предполагаю, что в вашем представленииDidLoad вы еще не успели геокодировать местоположение. Метод geocodeAddressString является асинхронным. Вы называете это, и он немедленно возвращается. Затем, некоторое время в будущем, ваш блок завершения вызывается.

Он должен ждать, потому что процесс геокодирования подключается к удаленному серверу по вашему сетевому соединению.

Если метод вызова ViewDidLoad вашего вида вызывается до завершения завершения геокода, ваши переменные широты и долготы еще не будут установлены.

Я предлагаю вам добавить логическую переменную экземпляра «geocodingComplete». Установите его в TRUE в обработчике завершения. Тогда вы сможете узнать, есть ли у вас действительный адрес, геокодированный или нет.

+0

я постараюсь это не получается. – uba2012

+0

где должно быть добавлено логическое значение? – uba2012

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