Использую Google Maps SDK for iOS 1.8.1. Код ниже. Создается только последний маркер. Непонятна причина.
@interface BanksViewController ()
@property (nonatomic, retain) CLLocationManager *locationManager;
@end
@implementation BanksViewController
{
GMSMapView *mapView_;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"menu_icon.png"]
style:UIBarButtonItemStyleBordered target:self action:@selector(showMenuViewController)];
self.navigationItem.leftBarButtonItem.tintColor = [UIColor whiteColor];
self.navigationItem.title = @"Банкоматы и банки";
_locationManager = [[CLLocationManager alloc] init];
_locationManager.distanceFilter = kCLDistanceFilterNone;
_locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
[self.locationManager startUpdatingLocation];
CLLocation *location = [_locationManager location];
CLLocationCoordinate2D coordinateCurrent = [location coordinate];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithTarget:coordinateCurrent zoom:14];
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
GoogleMapsView.myLocationEnabled = YES;
GoogleMapsView.settings.myLocationButton = YES;
GoogleMapsView.camera = camera;
GoogleMapsView.delegate = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
ParserDelegate* delegate = [ParserDelegate new];
NSString* coordString = [[NSBundle mainBundle] pathForResource:@"coordinates" ofType:@"xml"];
NSData *xmlData = [NSData dataWithContentsOfFile:coordString];
NSXMLParser* parser = [[NSXMLParser alloc] initWithData:xmlData];
[parser setDelegate:delegate];
[parser parse];
while ( ! delegate.done )
sleep(1);
if ( delegate.error == nil ) {
NSArray *itemsAll=delegate.items;
dispatch_async(dispatch_get_main_queue(), ^{
for (int i=0; i<itemsAll.count; i++) {
//сюда все приходит, проверил, массив из 7 словарей и берем dictionaty по i
NSDictionary *temp=itemsAll[i];
float latitude=[[temp objectForKey:@"latitude"] floatValue];
float longitude=[[temp objectForKey:@"longitude"] floatValue];
NSString *city=[temp objectForKey:@"city"];
NSString *street=[temp objectForKey:@"street"];
NSString *building=[temp objectForKey:@"building"];
GMSMarker *marker = [GMSMarker markerWithPosition:CLLocationCoordinate2DMake(latitude, longitude)];
marker.title =[temp objectForKey:@"name"];
marker.snippet = [NSString stringWithFormat:@"%@, %@ %@", city,street,building];
marker.map = GoogleMapsView;
}
GoogleMapsView=mapView_;
});
} else {
// если была - выводим ошибку
NSLog(@"Error: %@", delegate.error);
}
});
}
- (UIView*)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker {
UIViewController *controller=[[UIViewController alloc] initWithNibName:@"CustomViewForATM" bundle:nil];
CustomViewForATM *customView = (CustomViewForATM*)controller.view;
[mapView_ addSubview:customView];
return customView;
}
// метод, определяющий, что гуглокарты должны отображаться внутри вида GoogleMapsView на экране
- (void) setMapView:(GMSMapView *)mapView {
if (!mapView) {
mapView = [[GMSMapView alloc] initWithFrame:mapView.bounds];
}
GoogleMapsView = mapView;
}
@end
Итог- последний маркер стоит, остальные нет. пробовал не выделять память. Убирать инициализацию из цикла. Ничего не помогает. Ставит один маркер, а не 7.