didFailWithError: Error Domain=kCLErrorDomain Code=0 "操作无法完成。(kCLErrorDomain错误0。)"

86

我想获取当前位置,但却收到了错误提示。

以下是我的视图控制器代码片段。

- (void)viewDidLoad {
    self.locationManager = [[CLLocationManager alloc] init];
    [locationManager setDelegate:self];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
    [locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager 
     didUpdateLocations:(NSArray<CLLocation *> *)locations {
    // I would get the latest location here
    // but this method never gets called
}
- (void)locationManager:(CLLocationManager *)manager 
       didFailWithError:(NSError *)error {
    NSLog(@"didFailWithError: %@", error);
}

我期望委托方法locationManager:didUpdateLocations:被调用,但实际上只有locationManager:didFailWithError:被调用,并打印出以下内容:

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

你可以使用Google API作为替代方案。请参考我在这里的回答https://dev59.com/fIjca4cB1Zd3GeqP18xh#40670608。 - Deepak Thakur
跳转到模拟器 -> 功能 -> 位置 -> Apple。如果你将其设置为 none,它将无法工作并抛出此错误。我是无意中这样做的。 - CDM social medias in bio
19个回答

159
如果您正在使用模拟器:
  1. 在Xcode中按下 command + shift + , 打开方案编辑器
  2. 选择运行方案
  3. 进入选项选项卡
  4. 勾选 ✅ 允许位置模拟
  5. 在下拉菜单中选择默认位置
选择“无”作为默认位置可能会导致问题。

4
哇!谢谢,我已经追寻了几周了。我的应用程序一直强制将我的iPad或iPhone定位到伦敦,英国,我无法找出原因。我关闭了那个选项,问题就解决了。也许是因为抓取位置时出现了问题,然后自动更改为方案上的位置。 - Andrew Smith
7
对我有用,但我还必须执行iOS模拟器>重置内容和设置... - bendytree
对我来说做得很好。 - ScottyBlades

111
  1. 检查您是否确实拥有有效的WiFi和3G连接

    ...如果是这样,则:

  2. 进入设置并重置您的位置服务

  3. 重置您的网络设置

这可以解决该问题。这与应用程序无关,而是设备/网络相关的。如果您的应用程序依赖于位置服务,并且设备仅支持WiFi,人们会在AppStore上给出负面评价......对不起,我有点情绪化了。


2
据我所知,GPS不需要互联网或WiFi连接。它只是一个接收器,如果它在可访问的位置,并且有2或3个GPS卫星,我们就可以获得地理位置坐标。那么,如果没有互联网或WiFi连接,为什么会出现错误呢? - Durai Amuthan.H
2
指出重置位置服务和网络设置的一次点赞。 - Durai Amuthan.H
3
不需要经历这些步骤。只需忽略此错误并等待更多更新。请参阅下面的回答或查看文档:https://developer.apple.com/library/ios/documentation/corelocation/reference/cllocationmanagerdelegate_protocol/CLLocationManagerDelegate/CLLocationManagerDelegate.html#//apple_ref/occ/intfm/CLLocationManagerDelegate/locationManager:didFailWithError: - Ray Lillywhite
3
我曾经在使用MapKit和CoreLocation时遇到同样的问题,我的设备是iPhone 5S, iOS 8.1.3。我无法获取位置,并且一再收到相同的错误提示(尽管移动网络信号良好)。直到打开WiFi,一切都得到了解决!很奇怪...谢谢! - Vinzzz
2
@DuraiAmuthan.H iPads没有实际的GPS硬件。它们使用一个WiFi MAC地址数据库来确定您的位置。 - whoKnows
显示剩余6条评论

25

只需忽略此错误并等待更多更新或其他错误。

位置管理器的文档表示,此错误是暂时的。它让您知道它未能立即检索位置,但它会继续尝试。"在这种情况下,您可以简单地忽略错误并等待新事件。" 这是一种使用名为 locationManager:didFailWithError: 的方法非常愚蠢的方式 - 感谢Apple!

Apple文档


19

尝试重新启动模拟器(假设您使用的是模拟器)。

在尝试了其他一切方法之后,这对我起作用了。


14

重启模拟器对我没有用。

我必须通过"iOS模拟器" >> "重置内容和设置..."来清除所有内容。


9
我在模拟器上遇到了这个错误。单击调试面板中的位置按钮并设置位置后,问题就解决了。(确保按钮为蓝色)

7

我有同样的问题。我相信这个SO帖子中提供了可能的解释和修复方法。


5

在模拟器上更改“位置”对我有用。

调试 > 位置 > (我的选项是None而不是City Bicycle Ride 例如)


5
  1. 在模拟器中进入设置 > 通用 > 重置 > 重置位置和隐私

  2. 退出模拟器并重新运行应用程序


3
如果您正在使用模拟器,请确保方案允许位置,并选择一个默认位置。 enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接