-3

我试图在标签(位于 TableViewController 上)中显示从用户当前位置到其他地图视图注释(从我的 MapViewController 中提取)的距离,但由于某种原因,当我通过模拟器运行时,计算出的距离标签显示为 0.0000 ? 即使在我自定义了我的“当前位置”之后。关于为什么的任何想法?

MapViewController.h

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>


@interface MapViewController : UIViewController  <MKMapViewDelegate> 

    @property (nonatomic, strong) IBOutlet MKMapView *mapView;
    @property (nonatomic, retain) NSMutableArray *dispensaries;
    @property (nonatomic, retain) NSMutableData *data;



@end

MapViewController.m

[super viewDidUnload];



        NSLog(@"Getting Device Locations");

        NSString *hostStr = @"http://stylerepublicmagazine.com/dispensaries.php";
        NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:hostStr]];
        NSString *serverOutput = [[NSString alloc] initWithData:dataURL encoding: NSASCIIStringEncoding];
        NSLog(@"server output: %@", serverOutput);
        NSMutableArray *array = [[[serverOutput objectFromJSONString] mutableCopy] autorelease];   
        dispensaries = [serverOutput objectFromJSONString];
        NSLog(@"%@", [serverOutput objectFromJSONString]);
        for (NSDictionary *dictionary in array) {
            assert([dictionary respondsToSelector:@selector(objectForKey:)]);


            CLLocationCoordinate2D coord = {[[dictionary objectForKey:@"lat"] doubleValue], [[dictionary objectForKey:@"lng"] doubleValue]};

            MapViewAnnotation *ann = [[MapViewAnnotation alloc] init];
            ann.title = [dictionary objectForKey:@"Name"];
            ann.subtitle = [dictionary objectForKey:@"Address1"];
            ann.coordinate = coord;
            [mapView addAnnotation:ann];


    [mapView setMapType:MKMapTypeStandard];
    [mapView setZoomEnabled:YES];
    [mapView setScrollEnabled:YES];



    self.mapView.delegate = self;


}

}


- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation

{
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 2000, 2000);
    [self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];


MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = userLocation.coordinate;
point.title = @"You Are Here";
point.subtitle = @"Your current location";

[self.mapView addAnnotation:point];


}


- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

    for (MapViewAnnotation *annotation in self.mapView.annotations) {
        CLLocationCoordinate2D coord = [annotation coordinate];
        CLLocation *userLocation = [[CLLocation alloc] initWithLatitude:coord.latitude longitude:coord.longitude];
        annotation.distance = [newLocation distanceFromLocation:userLocation];
        CLLocationDistance calculatedDistance = [userLocation distanceFromLocation:userLocation];
        annotation.distance = calculatedDistance;
    }

    NSArray *sortedArray;
    sortedArray = [self.mapView.annotations sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        NSNumber *first = [NSNumber numberWithDouble:[(MapViewAnnotation*)a distance]];
        NSNumber *second = [NSNumber numberWithDouble:[(MapViewAnnotation*)b distance]];
        return [first compare:second];
    }];


}

表视图控制器.h

#import <UIKit/UIKit.h>

#import "MapViewController.h"


@interface TableViewController : UITableViewController {


    IBOutlet UITableView *DispensaryTableView;

    NSArray *dispensaries;
    NSMutableData *data;


}

@property CLLocationDistance calculatedDistance;






@end

表视图控制器.m

     [super viewDidLoad];

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    NSURL *url = [NSURL URLWithString:@"http://stylerepublicmagazine.com/dispensaries.php"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [[NSURLConnection alloc] initWithRequest:request delegate:self];

    // Do any additional setup after loading the view, typically from a nib.
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    data = [[NSMutableData alloc] init];

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)theData
{
    [data appendData:theData];

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{

    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    dispensaries = [NSJSONSerialization JSONObjectWithData:data options:nil error:nil];
    [DispensaryTableView reloadData];

}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    UIAlertView *errorView = [[UIAlertView alloc] initWithTitle:@"Error" message:@"The download could not complete - please make sure that you're connected to 3G or Wi-Fi." delegate:nil
                                              cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
    [errorView show];
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;


}
- (int)numberOfSectionsInTableView: (UITableView *)tableview

{
    return 1;

}

- (int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [dispensaries count];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{
    static NSString *DispensaryTableIdentifier = @"DispensaryCell";

    DispensaryCell *cell = (DispensaryCell *)[tableView dequeueReusableCellWithIdentifier:DispensaryTableIdentifier];
    if (cell == nil) 

    {

        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DispensaryCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    } 

    cell.nameLabel.text = [[dispensaries objectAtIndex:indexPath.row] objectForKey:@"Name"];
   cell.distanceLabel.text = [NSString stringWithFormat:@"%f", calculatedDistance]; 



           return cell;
}



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{


}
4

1 回答 1

2

似乎这一行:

    CLLocationDistance calculatedDistance = [userLocation distanceFromLocation:userLocation];

计算到自身的距离?

它之前的行似乎正确地计算了注释距离,但是你在之后的行中覆盖它......

于 2013-02-04T04:20:21.747 回答