iOS 9 MKTileOverlay 不工作

iOS 9 MKTileOverlay not working

我的应用程序在 iOS 8 上运行良好,但是当我尝试在 Xcode 7 上构建它时,地图没有显示。我在模拟器和真实设备上试过了。

下面是一些代码。

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSString *url = [[NSUserDefaults standardUserDefaults]
                            stringForKey:@"tileOverlayURL"];
    MKTileOverlay *overlay = [[MKTileOverlay alloc] initWithURLTemplate:url];
    overlay.canReplaceMapContent = YES;
    [self.mapView addOverlay:overlay level:MKOverlayLevelAboveLabels];
}

#pragma mark - MKMapViewDelegate

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

我在自定义叠加层中加载图块时遇到了同样的问题。我的问题是我使用的是 "http" 请求而不是 "https"。 "http" 的请求在 iOS9 上被认为是不安全的,默认情况下会被阻止。那可能是个问题。

我遇到了同样的问题。 IOS 9 默认情况下不允许连接到不安全的 URL。我使用的地图服务器是不安全的,因此 IOS 9 阻止了我的代码在 MkTileOverlay 中调用的 NSURLRequest 与地图服务器通信。

您可以告诉 IOS 9 允许访问这些不安全的服务器。您必须将 NSAppTransportSecurity 部分添加到您的 IOS 项目的 info.plist 文件并为您与之交谈的每个非安全地图服务器指定一个 NSExceptionDomain。这是一个显示我使用的 2 个地图服务器的示例。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>nationalmap.gov</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
        <key>opencyclemap.org</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>