iOS 8 - 无法获取当前位置,错误域= kCLErrorDomain代码= 0

时间:2015-03-28 01:02:04

标签: ios objective-c location ios-simulator cllocationmanager

我在获取当前位置时遇到了问题。我仍然得到错误:

Error Domain=kCLErrorDomain Code=0 "The operation couldn’t be completed. (kCLErrorDomain error 0.)"

我已经做了我在这里找到的所有事情:

重置iOS模拟器中的内容和设置(模拟器中的地图应用程序显示正确的位置)。
在Xcode at Product> Scheme> Edit I unmarked Allow Location Simulation(当我标记它时,它模拟例如伦敦)。
我已将NSLocationWhenInUseUsageDescription添加到我项目中的Info.plist文件中(App要求获取位置权限,我可以在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];    }

有什么我忘了吗? 谢谢!

3 个答案:

答案 0 :(得分:5)

我想你可能需要首先阅读这个帖子,因为它很大程度上是重叠的。

Location Manager Error : (KCLErrorDomain error 0)

但无论如何,我测试了你的代码并得到了你报告的相同错误。然后我改变了模拟配置。具体来说,在模拟器中,我点击了Debug - >位置 - >自定义位置...并输入一个坐标,我可以定期接收位置事件(以每秒每个样本的速度。)所以问题可能不是来自代码而是来自模拟器本身。希望我的回答有所帮助。

<强>更新

我想我误解了你的问题。你想要的是&#34;自动&#34;在模拟器中获取您当前的位置。我担心xcode中没有这样的功能,相反,你需要使用&#34;将gpx文件添加到项目&#34;,这比使用自定义位置更加重要。但我的意思是,如果您已经成功找到了正确的位置,为什么它让您无法从模拟器中获取正确的当前位置,或者替代方案,也许您可​​以在手机上进行测试?

答案 1 :(得分:2)

在iOS 8中,您必须先获得用户的许可才能访问无法访问本地的位置,如iOS 7所示

if CLLocationManager.locationServicesEnabled() {
        if self.manager.respondsToSelector("requestWhenInUseAuthorization") {
            manager.requestWhenInUseAuthorization()
        } else {
            startUpdatingLocation()
        }
    }

了解更多信息,请点击此链接http://nshipster.com/core-location-in-ios-8/

答案 2 :(得分:1)

检查互联网连接。 如果连接正常则 首先转到Xcode日志栏并设置&#34;不要模拟位置&#34;。然后选择模拟器菜单&gt; debug&gt; location&gt; set custom或select any。