我正在打电话
[locationManager requestWhenInUseAuthorization];
在显示MKMapView
(showsUserLocation = YES
)的屏幕上。这首先看起来很奇怪(Apple应该自动为MKMapView
处理这个问题,但是当我没有这样做时,XCode就会抱怨。)
因此,我获得了警告视图,表明应用程序想要使用您的位置,但警报视图会自动消失。
为什么警报视图会自行消失?
我唯一能想到的是我在requestWhenInUseAuthorization
方法中调用了initWithCoder
。我只是这样做,因为我认为从viewDidLoad调用它时我看到了Xcode投诉。
答案 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()