2014-11-05 1 views
0

моя проблема довольно проста, но я не могу понять это.подключитесь к серверу, а затем постройте координаты на mkmapview

Я пытаюсь добавить кнопку обновления в мое mapview, которое вернется на сервер и будет получать новые местоположения, если бы были какие-либо обновления. Мой код ниже уже может сделать первый вызов сервера с помощью метода 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 

ответ

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]; 
} 
+0

Спасибо, ваш ответ решил мою проблему –