Подтвердить что ты не робот

Наложение перекрытия 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];});});

Но это не похоже на проблему.

4b9b3361

Ответ 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