kCLErrorDomain Code=8 和 kCLErrorDomain Code=0 iOS 海外地图使用报错 解决办法亲测有效
海外地图使用报错Domain=kCLErrorDomain Code=8
原因是你在国内测试海外地图功能如定位和导航等,iOS内置的地理地图权限导致在国内使用就会有高德地图的标识出现,
就意味着你只能正常使用国内地理信息比如通过坐标获取如:深圳
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(22.511973,113.922009); // 深圳的经纬度
// // 创建一个CLLocation对象 // CLLocation *location = [[CLLocation alloc] initWithCoordinate:coordinate altitude:0 horizontalAccuracy:kCLLocationAccuracyBest verticalAccuracy:kCLLocationAccuracyBest timestamp:nil]; // // // 初始化CLGeocoder // CLGeocoder *geocoder = [[CLGeocoder alloc] init]; // // // 使用CLGeocoder进行反向地理编码 // [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) { // if (error) { // NSLog(@"Geocode failed with error: %@", error); // return; // } // // if (placemarks && placemarks.count > 0) { // CLPlacemark *placemark = placemarks[0]; // // // 输出位置信息 // NSLog(@"Placemark: %@", placemark); // NSLog(@"ISO Country Code: %@", placemark.ISOcountryCode); // NSLog(@"Country: %@", placemark.country); // NSLog(@"Locality (City): %@", placemark.locality); // NSLog(@"SubLocality (Suburb, Town, etc.): %@", placemark.subLocality); // NSLog(@"Postal Code: %@", placemark.postalCode); // NSLog(@"Thoroughfare (Street Name): %@", placemark.thoroughfare); // NSLog(@"SubThoroughfare (Street Number, Street Name Extension): %@", placemark.subThoroughfare); // // // 如果你需要更详细的地址组件,可以遍历placemark的addressComponents数组 //// for (CLLocationAddressComponent *component in placemark.addressComponents) { //// NSLog(@"Address Component Type: %@, Value: %@", component.type, component.value); //// } // } // }];
然而当你切换到海外就会报错 报错Domain=kCLErrorDomain Code=8
那么怎么回事?原来是政治和地理因素决定的,这时候你要考虑科学的上网V P N(注册一个海外的苹果ID后在海外的apple Store 下载一个免费V P N即可如快喵VPN),然后是
2.1 更改地图服务
操作步骤:
//1. 关闭 蜂窝移动数据; //2. 打开 无线局域网,连接一个WiFi; //3. 打开 飞行模式;这里是必须的因为你是在国内而且是虚拟定位不然的话就会报 Metal API Validation Enabled 的错误
//4. 打开 VPN 360 或其他VPN应用,连接VPN;
//5. 杀掉Apple自带的“地图”应用; //6. 重新打开Apple自带的“地图”应用,可以看到地图应用界面中的“高德地图”logo不见了。
到这里以后,你在调试经纬度坐标
CLLocationDegrees latitude = -33.8571126363083; // 悉尼的纬度示例 CLLocationDegrees longitude = 151.2151193250122; // 悉尼的经度示例
同样的代码就可以打印
此时你就可以拿到海外城市地理信息了!
中间你还可能遇到几个小插曲
⚠️ 1.Metal API Validation Enabled 的错误
解决办法:打开关闭切换一下飞行模式
⚠️2.为什么苹果定位不到国外?
解决办法: