Наложение перекрытия MapKit на iOS8
У меня есть этот код для реализации OSM в моем приложении по умолчанию Apple one:
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];});
и
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {
if ([overlay isKindOfClass:[MKTileOverlay class]]) {
return [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];
}
else return nil;
}
В iOS 7 все было хорошо, но теперь он возвращается несколько раз, и карта вообще не загружается:
<Error>: ImageIO: CGImageSourceCreateWithData data parameter is nil
Как я могу это исправить? Я попытался реорганизовать свой код, поэтому первый фрагмент кода теперь:
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];});});
Но это не похоже на проблему.
Ответы
Ответ 1
Используемый вами код выглядит хорошо, кроме...
Кажется странным, что вы делаете надстройку добавления в блоке. Я просто добавляю действие, и, похоже, он вообще не висит в пользовательском интерфейсе.
просто сделайте...
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];
Кроме того, я отправил ошибку Apple и когда захотел попробовать, мой оверлей не покажу... пока я не установлю делегат. (Хотя я был подключен к раскадровке). Apple закрыла мою ошибку как дубликат, чтобы они знали об этом.
mapView.delegate = self