ios objective-c ios8 mapkit openstreetmap

MapKit Tile Overlay roto en iOS8



objective-c openstreetmap (1)

Tengo este código para implementar OSM en mi aplicación a través de Apple por defecto:

dispatch_async(dispatch_get_main_queue(), ^{ NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png"; MKTileOverlay *overlay = [[MKTileOverlay alloc] initWithURLTemplate:template]; overlay.canReplaceMapContent = YES; [self.mapView addOverlay:overlay level:MKOverlayLevelAboveLabels];});

Y:

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay { if ([overlay isKindOfClass:[MKTileOverlay class]]) { return [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay]; } else return nil; }

En iOS 7 estaba bien, pero ahora vuelve varias veces y el mapa no se carga en absoluto:

<Error>: ImageIO: CGImageSourceCreateWithData data parameter is nil

¿Cómo puedo arreglarlo? Traté de refactorizar mi código, por lo que la primera parte del código ahora es:

dispatch_queue_t fetchTiles = dispatch_queue_create("fetcher", NULL); dispatch_async(fetchTiles, ^{ NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png"; MKTileOverlay *overlay = [[MKTileOverlay alloc] initWithURLTemplate:template]; overlay.canReplaceMapContent = YES; dispatch_async(dispatch_get_main_queue(), ^{ [self.mapView addOverlay:overlay level:MKOverlayLevelAboveLabels];});});

Pero esto no parece solucionar el problema.


El código que estás usando se ve bien, excepto ...

Parece extraño que estés haciendo la superposición de adición en un bloque. Acabo de agregar una acción y no parece que se cuelgue la interfaz de usuario en absoluto.

solo haz...

NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png"; MKTileOverlay *overlay = [[MKTileOverlay alloc] initWithURLTemplate:template]; overlay.canReplaceMapContent = YES; [self.mapView addOverlay:overlay level:MKOverlayLevelAboveLabels];

Además, envié un error a Apple y cuando querían una muestra, mi superposición no se mostraría ... hasta que establezca el delegado. (A pesar de que estaba conectado en el guión gráfico). Apple cerró mi error como un duplicado para que lo supieran.

mapView.delegate = self