CLLocationManager 警报自行解除

Posted

技术标签:

【中文标题】CLLocationManager 警报自行解除【英文标题】:CLLocationManager alert getting dismissed by itself 【发布时间】:2012-07-26 04:43:28 【问题描述】:

每当用户登录时,以及在其他几个地方,我都会调用当前位置。 每当我这样做时,请求用户许可的警报视图会出现一秒钟左右,然后消失。 显然,我不知道位置。每次我提示位置时都会发生这种情况。 它不允许用户单击取消或确定。 请帮忙

【问题讨论】:

自己解决了。 :) 我也遇到了这个问题,好像不明白为什么!? 【参考方案1】:

您可能没有保留 locationManager。因此,当您调用 [CLLocationManager startUpdatingLocation] 时,会显示警报,但一旦释放 locationManager,它就会消失。当我在为我的 locationManger 实例创建的属性中输入 assign 而不是 strong 时,曾经发生过这种情况。

【讨论】:

我怎么没想到呢?谢谢。【参考方案2】:

我的项目中遇到了同样的问题(swift lang)。

试试这个,将 CLLocationmanage 变量声明为全局变量并在你想要的地方调用。

例如:

    var locManager = CLLocationManager()

    override func viewDidLoad() 
    


    super.viewDidLoad()

let ios7 = floor(NSFoundationVersionNumber) <= floor(NSFoundationVersionNumber_iOS_7_1)

let iOS8 = floor(NSFoundationVersionNumber) > floor(NSFoundationVersionNumber_iOS_7_1)

            locManager.delegate = self
            locManager.desiredAccuracy = kCLLocationAccuracyBest
            if(iOS8)
            
                locManager.requestAlwaysAuthorization()// only support ios 8.0
            

    

【讨论】:

【参考方案3】:

尝试在 startUpdatingLocation 之后移动委托设置方法。这个对我有用。 示例:

CLLocationManager *m = [[CLLocationManager alloc] init];
[m startUpdatingLocation];
m.delegate = self;

Opz,我的英语很差。

【讨论】:

【参考方案4】:

我无法评论他的帖子,所以我在这里回答。

Gianluca Tranchedone 是对的。我的情况是,我保留了 CLLocationManager。但是:它在显示 AlertView 之后立即触发第一个回调,以告诉委托状态未确定。当收到任何回调时,我犯了释放实例的错误。

这就是该方法现在的样子并且可以正常工作:

-(void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status 
switch (status) 
    case kCLAuthorizationStatusNotDetermined:
        break;
    default:
        _locationManagerForAuthorizationRequest.delegate = nil;
        self.locationManagerForAuthorizationRequest = nil;

【讨论】:

以上是关于CLLocationManager 警报自行解除的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift:如何创建像 UIAlertView 这样看似在解雇后自行消失的对象

位置服务权限警报消失

一旦解除了引导 vue 警报,它就不再工作了

关闭自定义警报视图并解除 segue 问题?

如何在 Swift 中使用警报视图解除 segue?

UIAlertController - 如果警报第一次解除,则不执行操作