iOS 8 - 无法获取当前位置,错误域=kCLErrorDomain 代码=0
iOS 8 - Can't get current location, Error Domain=kCLErrorDomain Code=0
我无法获取当前位置。我仍然收到错误消息:
Error Domain=kCLErrorDomain Code=0 "The operation couldn’t be completed. (kCLErrorDomain error 0.)"
我已经完成了我在此处找到的所有内容:
重置 iOS 模拟器中的内容和设置(模拟器中的地图应用程序显示正确的位置)。
在 Xcode 的产品>方案>编辑中,我取消标记允许位置模拟(当我标记它时,它模拟例如伦敦)。
我已将 NSLocationWhenInUseUsageDescription 添加到我项目中的 Info.plist 文件(应用程序要求位置权限,我可以在 iOS 模拟器的设置中看到它们)。
我打开了 Wi-Fi 连接(就像我说的那样,定位服务在 Safari、地图甚至 iOS 模拟器中的地图中工作正常)。
-(void)viewDidLoad {
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
if(IS_OS_8_OR_LATER){
NSUInteger code = [CLLocationManager authorizationStatus];
if (code == kCLAuthorizationStatusNotDetermined && ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])) {
if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"]) {
[self.locationManager requestWhenInUseAuthorization];
} else {
NSLog(@"Info.plist does not contain NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription");
}
}
}
[self.locationManager startUpdatingLocation];
[self.FirstMap setShowsUserLocation:YES]; }
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
NSLog(@"didFailWithError: %@", error);
UIAlertView *errorAlert = [[UIAlertView alloc]
initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show]; }
有什么我忘了的吗?
谢谢!
我猜你可能需要先阅读这个帖子,因为它有很大的重叠。
Location Manager Error : (KCLErrorDomain error 0)
但无论如何,我测试了您的代码并得到了与您报告的相同的错误。然后我更改模拟配置。具体来说,在模拟器中,我点击 Debug -> Location -> Custom Location... 并输入坐标,我可以定期接收位置事件(以每秒每个样本的速度。)所以也许问题不是来自代码,但来自模拟器本身。希望我的回答对你有帮助。
更新
我想我误解了你的问题。你想要的是 "automatically" 在模拟器中获取你当前的位置。恐怕 xcode 中没有这样的功能,您需要使用 "add gpx file to project",这比使用自定义位置还要麻烦。但我的意思是,如果您已经成功获得了正确的位置,为什么从模拟器或替代方案中获得正确的当前位置会让您感到困扰,也许您可以在 phone?
上进行测试
在iOS 8中你必须首先获得用户的许可才能访问你无法访问本地的位置,如在iOS 7中
if CLLocationManager.locationServicesEnabled() {
if self.manager.respondsToSelector("requestWhenInUseAuthorization") {
manager.requestWhenInUseAuthorization()
} else {
startUpdatingLocation()
}
}
如需更多帮助,请参考此 link http://nshipster.com/core-location-in-ios-8/
检查互联网连接。
如果连接正常
首先转到 Xcode 日志栏并设置 "Dont simulate location"。然后 select simulator menu>debug>location>set custom or select any.
我无法获取当前位置。我仍然收到错误消息:
Error Domain=kCLErrorDomain Code=0 "The operation couldn’t be completed. (kCLErrorDomain error 0.)"
我已经完成了我在此处找到的所有内容:
重置 iOS 模拟器中的内容和设置(模拟器中的地图应用程序显示正确的位置)。
在 Xcode 的产品>方案>编辑中,我取消标记允许位置模拟(当我标记它时,它模拟例如伦敦)。
我已将 NSLocationWhenInUseUsageDescription 添加到我项目中的 Info.plist 文件(应用程序要求位置权限,我可以在 iOS 模拟器的设置中看到它们)。
我打开了 Wi-Fi 连接(就像我说的那样,定位服务在 Safari、地图甚至 iOS 模拟器中的地图中工作正常)。
-(void)viewDidLoad {
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
if(IS_OS_8_OR_LATER){
NSUInteger code = [CLLocationManager authorizationStatus];
if (code == kCLAuthorizationStatusNotDetermined && ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])) {
if([[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"]) {
[self.locationManager requestWhenInUseAuthorization];
} else {
NSLog(@"Info.plist does not contain NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription");
}
}
}
[self.locationManager startUpdatingLocation];
[self.FirstMap setShowsUserLocation:YES]; }
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
NSLog(@"didFailWithError: %@", error);
UIAlertView *errorAlert = [[UIAlertView alloc]
initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show]; }
有什么我忘了的吗? 谢谢!
我猜你可能需要先阅读这个帖子,因为它有很大的重叠。
Location Manager Error : (KCLErrorDomain error 0)
但无论如何,我测试了您的代码并得到了与您报告的相同的错误。然后我更改模拟配置。具体来说,在模拟器中,我点击 Debug -> Location -> Custom Location... 并输入坐标,我可以定期接收位置事件(以每秒每个样本的速度。)所以也许问题不是来自代码,但来自模拟器本身。希望我的回答对你有帮助。
更新
我想我误解了你的问题。你想要的是 "automatically" 在模拟器中获取你当前的位置。恐怕 xcode 中没有这样的功能,您需要使用 "add gpx file to project",这比使用自定义位置还要麻烦。但我的意思是,如果您已经成功获得了正确的位置,为什么从模拟器或替代方案中获得正确的当前位置会让您感到困扰,也许您可以在 phone?
上进行测试在iOS 8中你必须首先获得用户的许可才能访问你无法访问本地的位置,如在iOS 7中
if CLLocationManager.locationServicesEnabled() {
if self.manager.respondsToSelector("requestWhenInUseAuthorization") {
manager.requestWhenInUseAuthorization()
} else {
startUpdatingLocation()
}
}
如需更多帮助,请参考此 link http://nshipster.com/core-location-in-ios-8/
检查互联网连接。 如果连接正常 首先转到 Xcode 日志栏并设置 "Dont simulate location"。然后 select simulator menu>debug>location>set custom or select any.