【问题标题】:CLLocationManager alert getting dismissed by itselfCLLocationManager 警报自行解除
【发布时间】:2012-07-26 04:43:28
【问题描述】:
每当用户登录时,以及在其他几个地方,我都会调用当前位置。
每当我这样做时,请求用户许可的警报视图会出现一秒钟左右,然后消失。
显然,我不知道位置。每次我提示位置时都会发生这种情况。
它不允许用户单击取消或确定。
请帮忙
【问题讨论】:
标签:
iphone
ios
location
cllocationmanager
cllocation
【解决方案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;
}
}