CLLocationManager坏了。不再更新位置

时间:2015-04-19 21:01:21

标签: ios objective-c xcode

在有人怀疑之前,是的,我确实读过了其他解决方案,我的程序最近神秘地破解了。我没有对我的代码进行任何更改,只是今天尝试为朋友运行模拟以查看我的应用程序,我感到害怕:

  

尝试在不提示位置授权的情况下启动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];
}

有人有建议吗?

3 个答案:

答案 0 :(得分:0)

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

[manager requestWhenInUseAuthorization]; [manager requestAlwaysAuthorization];

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

NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription

答案 1 :(得分:0)

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

答案 2 :(得分:0)

务必检查经理是否为零!很容易忽视这一点。只需在viewDidLoad中放置一个断点,然后查看管理器的设置。

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