【问题标题】:CLLocationManager broke. No longer updating locationCLLocationManager 坏了。不再更新位置
【发布时间】:2015-04-19 21:01:21
【问题描述】:

在任何人怀疑之前,是的,我确实阅读了其他解决方案,我的程序最近神秘地崩溃了。我没有对我的代码进行任何更改,就在今天尝试运行一个模拟让朋友看看我的应用程序,我得到了可怕的:

尝试在不提示位置授权的情况下启动 MapKit 位置更新。必须先调用 -[CLLocationManager requestWhenInUseAuthorization] 或 -[CLLocationManager requestAlwaysAuthorization]。

好吧,我仔细检查了我的 plist,两者都是

NSLocationAlwaysUsageDescription

NSLocationAlwaysUsageDescription 

还在。

这是我的 viewDidLoad 方法:

- (void)viewDidLoad {
    [super viewDidLoad];

    [mainMapView setDelegate:self];
    [mainMapView setShowsUserLocation:YES];

    [manager setDelegate:self];
    [manager requestWhenInUseAuthorization];
    [manager requestAlwaysAuthorization];
    [manager setDistanceFilter:kCLDistanceFilterNone];
    [manager setDesiredAccuracy:kCLLocationAccuracyBest];
    [manager startUpdatingLocation];

    [search setDelegate:self];
    [search setAlpha:0];

    annotationArray = [[NSMutableArray alloc]init];

    model = [[DataModel alloc]init];
}

有人有什么建议吗?

【问题讨论】:

  • 你在哪里初始化管理器?向我们展示代码。
  • Paul 得到了答案,我在一个没有被调用的单独方法中初始化管理器。谢谢你指出这一点。我讨厌简单的疏忽……
  • 没问题,我会给出答案,而不是评论。这样我们就可以得到一些虚假的互联网积分。

标签: ios objective-c xcode


【解决方案1】:

为什么要同时使用两个权限请求

[manager requestWhenInUseAuthorization]; [manager requestAlwaysAuthorization];?

您是否为 .plist 文件的权限添加了正确的密钥?

NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription

【讨论】:

  • 是的,两个键都在我的 info.plist 中,用户提示输入字符串值。出于方便,我使用这两个权限请求。当我运行模拟时,我会评论其中一个或另一个
  • 只是想知道,如果您使用的是模拟器,您是否告诉模拟器模拟位置?
【解决方案2】:

保罗·塞尚指出了我令人尴尬的疏忽。非常感谢您的回复。我在一个没有被调用的单独方法中初始化我的经理。事实证明,我实际上使用的是我的 repo 中的旧版本,而不是最新版本。

【讨论】:

    【解决方案3】:

    一定要检查 manager 不是 nil !很容易忽略这一点。只需在 viewDidLoad 中放置一个断点,然后查看 manager 设置为什么。

    另一种导致此操作失败的常见方法是初始化您的经理,但不将其分配给属性。当您运行 ARC 时,它将在不再在范围内时被释放。只需将其设为视图控制器对象中的属性即可。

    【讨论】:

      猜你喜欢
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 2015-06-07
      • 1970-01-01
      • 2011-08-27
      • 2016-01-09
      相关资源
      最近更新 更多