У меня есть приложение, которое перечисляет количество мест, в которых хранятся их широта и долгота в базе данных. Я заполняю список с помощью JSON. И тогда я отображаю результат в динамической таблице. В камерах у меня расстояние в километрах от места встречи. Я нахожу это расстояние, получая текущее местоположение пользователей и вычисляя расстояние с координатами места.
Работает нормально, но моя проблема в том, что вид загружается, расстояния неправильные, пока через 3-5 секунд, когда пользовательское местоположение обновляется, он показывает правильные расстояния.
Я получаю местоположение пользователя и заполняю ячейки в viewdidload.
Мой вопрос: возможно ли получить местоположение пользователя в предыдущем виде и передать его в этот вид, чтобы показанные расстояния изначально были правильными?
Вот код:
Сначала я получаю пользователя loc в viewdidload:
- (void)viewDidLoad {
[super viewDidLoad];
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
[locationManager startUpdatingLocation];
Тогда дальше, чем я получаю свои данные JSON и т. Д. Затем я делаю tableView:
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [rows count];
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
// int degrees = newLocation.coordinate.latitude;
// double decimal = fabs(newLocation.coordinate.latitude - degrees);
// int minutes = decimal * 60;
// double seconds = decimal * 3600 - minutes * 60;
// NSString *lat = [NSString stringWithFormat:@"%d° %d' %1.4f\"",
// degrees, minutes, seconds];
NSString *lat = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
latLabel.text = lat;
// degrees = newLocation.coordinate.longitude;
// decimal = fabs(newLocation.coordinate.longitude - degrees);
// minutes = decimal * 60;
// seconds = decimal * 3600 - minutes * 60;
// NSString *longt = [NSString stringWithFormat:@"%d° %d' %1.4f\"",
// degrees, minutes, seconds];
NSString *longt = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude];
longLabel.text = longt;
//CGFloat Alat = [lat floatValue];
//CGFloat Alon = [longt floatValue];
self.aalat = lat;
self.aalon = longt;
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
// Configure the cell.
NSDictionary *dict = [rows objectAtIndex: indexPath.row];
THELATITUDE = [dict objectForKey:@"L_LAT"];
THELONGITUDE = [dict objectForKey:@"L_LON"];
CGFloat Nlat = [THELATITUDE floatValue];
CGFloat Nlon = [THELONGITUDE floatValue];
CGFloat NNlat = [aalat floatValue];
CGFloat NNlon = [aalon floatValue];
// NSLog(@"lat1: %f", Nlat);
// NSLog(@"Lon1: %f", Nlon);
// NSLog(@"lat2: %f", NNlat);
// NSLog(@"Lon2: %f", NNlon);
// NSLog(@"aalat: %@", aalat);
// NSLog(@"aalon: %@", aalon);
CLLocation *location1 = [[CLLocation alloc] initWithLatitude:Nlat longitude:Nlon];
CLLocation *location2 = [[CLLocation alloc] initWithLatitude:NNlat longitude:NNlon];
// NSLog(@"Distance i meters: %f", [location1 getDistanceFrom:location2]);
float mesafe1 = [location1 getDistanceFrom:location2 ] /1000;
int x1 = mesafe1 * 100.0;
float mesafe2 = (float) x1 / 100.0;
//Create a string.
NSString *strOne = [[NSString alloc] init];
NSString *strTwo = [[NSString alloc] init];
NSString *strThree = [[NSString alloc] init];
NSString *strFour = [[NSString alloc] init];
NSString *strFive = [[NSString alloc] init];
//Append strings.
strOne = @"MESAFE: ";
strTwo = [NSString stringWithFormat:@"%0g", mesafe2];
strThree = @" kilometre";
strFour = [strOne stringByAppendingString:strTwo];
strFive = [strFour stringByAppendingString:strThree];
NSString *mesafe = strFive;
cell.textLabel.text = [dict objectForKey:@"L_NAME"];
//cell.detailTextLabel.text = [dict objectForKey:@"LISTING_ID"];
cell.detailTextLabel.text = mesafe;
[cell.textLabel setTextColor:[UIColor blackColor]];
return cell;
}