【问题标题】:Alert view disappears on its own when calling [locationManager requestWhenInUseAuthorization];调用 [locationManager requestWhenInUseAuthorization] 时,警报视图会自行消失;
【发布时间】:2015-01-18 20:51:22
【问题描述】:

我在打电话

[locationManager requestWhenInUseAuthorization];

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

所以我得到了一个警报视图,它说应用程序想要使用您的位置,但随后警报视图自行消失了。

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

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

【问题讨论】:

    标签: ios mapkit core-location


    【解决方案1】:

    您可能正在被 ARC 处理。确保您仍然拥有对 CLLocationManager 的引用。您可以通过将其设为属性来轻松做到这一点。

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

    @property (strong, nonatomic) CLLocationManager *locationManager
    

    有关详细信息,请参阅 Apple 的 ARC documentation。 (感谢 Falko 寻找到该链接的深层链接。)

    我将 Gobe 的评论内嵌,以防您没有滚动阅读。

    对于 Swift:而不是创建本地范围的 locationManager 对象, 让它作为你关心的类的属性,比如 private let locationManager = CLLocationManager() 然后正常使用 self.locationManager.requestWhenInUseAuthorization()

    【讨论】:

    • 嗯,似乎很有可能。我去看看。
    • 谢谢!我正在转向 Swift,并认为 CLLocationManager() 返回了一个单例。
    • 对于 Swift:不要创建一个本地范围 locationManager 对象,而是让它作为你关心的类的属性,比如 private let locationManager = CLLocationManager(),然后像 self.locationManager.requestWhenInUseAuthorization() 一样正常使用它
    猜你喜欢
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 2016-01-02
    相关资源
    最近更新 更多