调用[locationManager requestWhenInUseAuthorization]时,警报视图会自动消失;

时间:2014-11-20 20:32:04

标签: ios mapkit core-location

我正在打电话

[locationManager requestWhenInUseAuthorization];

在显示MKMapViewshowsUserLocation = YES)的屏幕上。这首先看起来很奇怪(Apple应该自动为MKMapView处理这个问题,但是当我没有这样做时,XCode就会抱怨。)

因此,我获得了警告视图,表明应用程序想要使用您的位置,但警报视图会自动消失。

为什么警报视图会自行消失?

我唯一能想到的是我在requestWhenInUseAuthorization方法中调用了initWithCoder。我只是这样做,因为我认为从viewDidLoad调用它时我看到了Xcode投诉。

1 个答案:

答案 0 :(得分:90)

你可能正在被ARC'd。确保您仍然具有对CLLocationManager的引用。您可以通过将其作为财产来轻松完成此任务。

ARC代表自动参考计数。在启用ARC的项目中(除非您正在处理一些非常旧的项目,或者您故意将其关闭,您的项目是一个启用ARC的项目),您需要保留对稍后将使用的对象的引用。 CLLocationManager不返回单例,因此您需要在关注的类中保留对它的引用。像这样:

@property (strong, nonatomic) CLLocationManager *locationManager

有关详细信息,请参阅Apple的ARC documentation。 (并且感谢Falko寻找与之相关的深层链接。)

如果您没有滚动阅读它,我会将Gobe的评论内联。

  

对于Swift:而不是创建本地范围的locationManager对象,   让它作为你关心的课程的财产,就像私人让   locationManager = CLLocationManager()然后正常使用它   self.locationManager.requestWhenInUseAuthorization()