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>
我的应用程序在 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>