свържете се със сървъра, след което начертайте координати в mkmapview

проблемът ми е доста прост, но не мога да го разбера.

Опитвам се да добавя бутон за опресняване към моя изглед на карта, който ще се върне към сървъра и ще извлече нови местоположения, ако е имало актуализации. Моят код по-долу вече може да направи първото извикване на сървъра с метода viewdidload и може да начертае всички местоположения на сървъра на картата. Това, от което се нуждая сега, е бутон, който ще направи същото извикване при всяко натискане. Използвам един клас за целия си код, така че, моля, вашето най-просто решение, което лесно ще се слее с кода, ще бъде много оценено.

Също така съм много нов в програмирането на iOS, така че всеки съвет за това как да подредя кода си също ще бъде оценен.

Това е моят контролер за изглед, който съдържа целия ми код.

//ViewController.m

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
self.mapView.delegate = self;

locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDistanceFilter:kCLDistanceFilterNone];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1) {

    [self.mapView setShowsUserLocation:YES];

} else {
    [locationManager requestWhenInUseAuthorization];
}

NSURL *jsonFileUrl = [NSURL URLWithString:@"http://sample.name/service.php"];
NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:jsonFileUrl];
[NSURLConnection connectionWithRequest:urlRequest delegate:self];
}

#pragma mark NSURLConnectionDataProtocol Methods

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

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

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{

NSMutableArray *_locations = [[NSMutableArray alloc] init];

NSError *error;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:_downloadedData options:NSJSONReadingAllowFragments error:&error];

CLLocationCoordinate2D coordinate;

for (int i = 0; i < jsonArray.count; i++)
{
    NSDictionary *jsonElement = jsonArray[i];

    MKPointAnnotation* marker = [[MKPointAnnotation alloc] init];

    marker.title = jsonElement[@"Name"];
    marker.subtitle = jsonElement[@"Address"];
    coordinate.latitude = [jsonElement [@"Latitude"] doubleValue];
    coordinate.longitude = [jsonElement [@"Longitude"] doubleValue];

    marker.coordinate = coordinate;
    [_locations addObject:marker];
}

[self.mapView addAnnotations:_locations];
}

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id     <MKAnnotation>)annotation
{
static NSString *identifier;
{
    if (annotation == mapView.userLocation) return nil;

    MKAnnotationView *annotationView;
    if (annotationView == nil) {
        annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
        annotationView.enabled = YES;
        annotationView.canShowCallout = YES;
        annotationView.image = [UIImage imageNamed:@"blue_pin.png"];
    } else {
        annotationView.annotation = annotation;
    }
    return annotationView;
}

return nil;
}

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
    [self.mapView setShowsUserLocation:YES];
}
}

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
CLLocationCoordinate2D myLocation = [userLocation coordinate];
MKCoordinateRegion zoomRegion = MKCoordinateRegionMakeWithDistance(myLocation, 10000, 10000);
[self.mapView setRegion:zoomRegion animated:YES];
}

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)InterfaceOrientation
{
return (InterfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (IBAction)Refresh:(id)sender {
}
@end

person fa_devlpr    schedule 05.11.2014    source източник


Отговори (1)


Можете да намерите моето решение с коментар.

Премахнете старите си данни, когато опресните или когато получите отговор.

- (IBAction)action_goToManageDevice:(id)sender
{
   [self reloadData];
}

- (void)reloadData
{
     // Remove old annotation
     [self.mapView removeAnnotations:self.mapView.annotations];

     // reload your data
     NSURL *jsonFileUrl = [NSURL URLWithString:@"http://sample.name/service.php"];
     NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:jsonFileUrl];
     [NSURLConnection connectionWithRequest:urlRequest delegate:self];
}
person ben_    schedule 05.11.2014