Obj-C - Добавить значения CLLocation в nsdictionary? - PullRequest
0 голосов
/ 07 апреля 2019

Я получаю список расстояний с помощью CLLocation со следующим кодом:

ViewController.h

    @property (nonatomic) CLLocationDistance kilometers;
    @property (nonatomic) CLLocation *startLocation;
    @property (nonatomic) CLLocation *endLocation;
@property (nonatomic) NSMutableDictionary *allDistances;

ViewController.m

self.startLocation = [[CLLocation alloc] initWithLatitude:aPlacemark.location.coordinate.latitude longitude:aPlacemark.location.coordinate.longitude] ;


self.endLocation = [[CLLocation alloc] initWithLatitude:placemark.location.coordinate.latitude longitude:placemark.location.coordinate.latitude] ;


self.kilometers = [self.startLocation distanceFromLocation:self.endLocation] / 1000; 

Тем не менее, я хочу отобразить список расстояний, возвращаемых в моем UITableView. Могу ли я добавить свои возвращенные расстояния CLLocation к NSMutableDictionary (мой NSMutableDictionary под названием allDistances)?

В настоящее время, если я пытаюсь отобразить значения из self.kilometer, например, в ячейке, я получаю одно и то же значение каждый раз:

 [[cell kmAway] setText:[NSString stringWithFormat:@"%f", self.kilometers]];

1 Ответ

0 голосов
/ 08 апреля 2019

Похоже, ваши расчеты расстояния для каждого пользователя перезаписываются.

Я полагаю, allDistances имеет ключ userID (или что-то подобное). Учитывая это предположение, когда вычисление расстояния будет завершено, вы захотите вставить это расстояние в allDistances, например, так:

CLLocationDistance distanceInKilometers = [self.startLocation distanceFromLocation:self.endLocation] / 1000.0;
self.allDistances[userID] = @(distanceInKilometers);

ПРИМЕЧАНИЕ : @() необходим для того, чтобы хранить примитивный тип (то есть double, который является CLLocationDistance) в коллекции Objective-C, такой как NSMutableDictionary. Это называется «боксом», и оно превращает CLLocationDistance в NSNumber *.

Теперь, когда все ваши расстояния рассчитаны и сохранены в allDistances, в вашем методе -tableView:cellForRowAtIndexPath: вы можете использовать их для каждой ячейки:

// Assuming you know what user this cell belongs to, 
// pull the distance out of `allDistances` using their `userID`.
NSNumber *distanceNumber = self.allDistances[userID];

// "Unbox" the number as a `CLLocationDistance`
CLLocationDistance distance = distanceNumber.doubleValue;

// Use that distance to set the cell text
cell.kmAway.text = [NSString stringWithFormat:@"%f", distance];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...