【问题标题】:IOS 9 Error Domain=kCLErrorDomain Code=0 "(null)"IOS 9 错误域=kCLErrorDomain 代码=0“(空)”
【发布时间】:2015-12-09 05:05:53
【问题描述】:

下面的代码应该获取当前位置。但是会产生上述错误。函数 didUpdateLocations 永远不会被调用。

在设备 (iPhone 5s)iOS 9.1 上运行。 Info.plist 具有所需的设备功能和隐私 - 配置的位置使用描述,如附图所示。请帮忙!

let locationManager = CLLocationManager()

override func viewDidLoad() {
    super.viewDidLoad()
    locationManager.delegate = self
    locationManager.requestAlwaysAuthorization()
    locationManager.requestLocation()
}


func locationManager(manager: CLLocationManager,
    didFailWithError error: NSError) 
    print(error.description)
}

func locationManager(manager: CLLocationManager, didUpdateLocations
      locations: [CLLocation]) {        
 print(“got location”)
}

【问题讨论】:

  • 嘿,你找到解决方案了吗
  • 嗨@user1848653:你能把我的回答标记为接受吗?我经常收到 +1,它会提供更多可见性来帮助开发人员解决此错误。
  • 请在真机上查看。我也面临同样的问题,但它正在真实设备上运行。
  • 除了H4Hugo提供的解决方案外,我还需要在模拟器中删除app,在X11中重新运行。

标签: iphone cllocationmanager ios9


【解决方案1】:

请试试这个:

转到:

  • 产品 -> 方案 -> 编辑方案 -> 选项 -> 必须选中允许位置模拟并尝试提供默认位置,不要将其设置为“无”

编辑:正如 cmets 中提到的,同样重启 Xcode 就完成了!

希望这会有所帮助。

【讨论】:

  • 我可以确认这是可行的。我遇到了与原始问题中提到的完全相同的问题,并且在选中“允许位置模拟”时,我将默认位置设置为无。将其更改为默认位置,然后重新启动 Xcode 即可解决此问题。
  • @user212514 我在另一个项目上再次遇到这个错误,使用我提供的方法来更正它并且不必重新启动 Xcode。您能确认您显示的错误消息相同吗?
  • 抱歉,我无法确认这是完全相同的消息。我主要认为它是完全一样的,但它似乎都消失了,我不知道如何重新创建它。
  • 谢谢,这也是我的问题
  • 感谢您的解决方案!将默认位置从“无”更改为第一个值,位置服务开始工作,即使没有重新启动 Xcode。
【解决方案2】:

在 XCode 11.5 及更高版本中...

打开你的模拟器:

功能 => 位置 => 自定义位置

【讨论】:

  • 在 macOS big sur 和 xcode 12 上为我工作
【解决方案3】:

如果没有为您弹出位置授权警报,请尝试将 NSLocationAlwaysUsageDescription 作为类型字符串添加到您的 plist。此外,对 NSLocationWhenInUseUsageDescription 执行相同的操作。

【讨论】:

    【解决方案4】:

    google true the answers 这似乎是IOS4.0以来的一个问题。

    在 XCODE 7.1 下 Project => scheme => edit scheme。

    在运行 => 选项 => 核心位置/禁用允许位置模拟。

    在 IOS 模拟器中的 Debug => Location 下选择一个位置。这解决了我的问题。

    【讨论】:

      【解决方案5】:

      在模拟器中试试这个 --> 调试 --> 位置

      【讨论】:

        【解决方案6】:

        我在从 8.0 -> 9.0/9.1 迁移的应用程序中遇到了同样的问题。我尝试了一些方法,例如仅在 Swift 中编写 CLLocationManager 部分以及一个新的 Obj-C 项目。我还在不同的设备上进行了测试。为了解决设备上的问题,我删除了 didFailWithError 函数。这完全停止了错误。这似乎不是最好的主意,但在 IOS9 中,您可以将应用程序限制在具有 GPS 或位置服务的设备上。 Android 已经这样做了很长时间。我还在您的 .plist 中注意到您没有为 NSLocationALwaysUsageDescription 或包含的 NSLocationWhenInUseUsageDescription 属性启用权限。

        仅供参考,我附上了我当前的 .plist 看起来不会触发此错误的内容以及 obj-c 控制器文件中的代码块。代码从前一个函数的最后开始,然后注释掉了 didFailWithError 委托和 didUpdateLocations。目前这在 IOS 9.1 中成功运行

               //Get map authorization
            [CLLocationManager locationServicesEnabled];
            locationManager = [[CLLocationManager alloc]init];
            locationManager.delegate = self;
            locationManager.allowsBackgroundLocationUpdates = YES;
            if(nil == locationManager) locationManager = [[CLLocationManager alloc]init];
            if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
                [locationManager requestAlwaysAuthorization];
            }
            //locationManager.distanceFilter=10;
            locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        
            [locationManager startUpdatingLocation];
        
        
        
        //- (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];
        //}
        
        -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
        
        
            NSLog(@"LocationUpdated: %@",[locations lastObject]);
            [self updateMapMarkers];
        
        //    NSDate* eventDate = location.timestamp;
        //    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
        //    if(fabs(howRecent) < 15.0){
        //        [self updateMapMarkers];
        //    }
        
        }
        

        【讨论】:

          【解决方案7】:

          我正在使用 XCode 12.5/IOS 14。这是我为解决问题所做的工作

          1. 在 XCode 中,转到菜单“Product -> Scheme -> Edit scheme”或按“Shift+Command+”
          2. 点击左侧窗格中的“运行”,然后点击“选项”
          3. 您会找到“核心位置”字段,确保选中“允许位置模拟”
          4. 另外,不要将“默认位置”下拉菜单保留为“无”。选择任何城市
          5. 关闭。无需重启 XCode

          【讨论】:

            【解决方案8】:

            我有这些建议给在他们的应用中使用苹果地图的人

            1. 不要依赖模拟器的结果,因为它总是不会给出准确的结果。
            2. 适用于真实设备上的所有地图相关调试和执行测试。
            3. 在 xcode 8 中(据我所知),您只需将 iOS 设备连接到系统并直接运行应用程序即可。
            4. 即使是上面的问题,解决方法都是一样的,只要用真机试一试,问题就会迎刃而解。

            【讨论】:

              【解决方案9】:

              在我的例子中,我将 CLLocationManager() 的返回值分配给 ViewControllers viewDidLoad 覆盖内的一个变量。

              一旦生命周期方法完成,对象引用就会被释放;在用户有机会响应之前关闭对话框,还会导致其他可能依赖于该引用的逻辑问题。

              我只需要将赋值从生命周期方法覆盖移到我正在使用它的类的根目录中。

              【讨论】:

                猜你喜欢
                • 2016-01-26
                • 2016-07-23
                • 1970-01-01
                • 2015-06-01
                • 1970-01-01
                • 2015-10-29
                • 2018-07-05
                • 1970-01-01
                • 2012-03-20
                相关资源
                最近更新 更多