Ios CLLocationManager-授权提示消失?

Ios CLLocationManager-授权提示消失?,ios,swift,class,cllocationmanager,Ios,Swift,Class,Cllocationmanager,我尝试构建一个locationHelper类来处理使用CLLocation的方法,这样我就不必在每个视图控制器中重写它们。My LocationHelper类有一个方法checkStatus(),用于检查用户是否已授予使用其位置的身份验证。但是,如果我调用该方法,而用户没有授予该权限,则提示会出现,但会在出现2秒钟后消失。我认为问题在于类的实现,因为如果我在ViewController中编写代码,提示将一直保留到用户做出决定为止。 我的位置helper.swift: import Fou

我尝试构建一个locationHelper类来处理使用CLLocation的方法,这样我就不必在每个视图控制器中重写它们。My LocationHelper类有一个方法checkStatus(),用于检查用户是否已授予使用其位置的身份验证。但是,如果我调用该方法,而用户没有授予该权限,则提示会出现,但会在出现2秒钟后消失。我认为问题在于类的实现,因为如果我在ViewController中编写代码,提示将一直保留到用户做出决定为止。 我的位置helper.swift:

    import Foundation
import CoreLocation

class LocationHelper: NSObject, CLLocationManagerDelegate{
    var locationManager: CLLocationManager!
    var delegate: CLLocationManagerDelegate!
    override init(){
        super.init()
        self.locationManager = CLLocationManager()
        locationManager.delegate = self
    }

    func requestPermission() -> Void {
        self.locationManager?.requestWhenInUseAuthorization()
    }

    //func getLocationInstance() -> CLLocationManager {
    //    return self.locationManager?
    //}
    func checkStatus() -> Void {
        switch CLLocationManager.authorizationStatus() {
        case .notDetermined:
            // Request when-in-use authorization initially
            print("not determined")
            locationManager?.requestWhenInUseAuthorization()

        case .restricted, .denied:
            // Disable location features
            print("status: fail")

        case .authorizedWhenInUse:
            // Enable basic location features
            print("in use")


        case .authorizedAlways:
            print("always")
        }
    }

}
我的ViewController:

import UIKit

class LiveDataViewController: UIViewController {


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.view.backgroundColor = UIColor(red: 0.12, green: 0.67, blue: 0.478, alpha: 1)
        let locHelp = LocationHelper()
        locHelp.checkStatus()


        //locHelp LocationHelper = LocationHelper()
        //locHelp.requestPermission()

    }

如果有人能帮助我,我将非常高兴。

尝试保存对位置助手的引用

它可能在视图加载后自动释放

像这样:

import UIKit

class LiveDataViewController: UIViewController {

    let locHelp = LocationHelper()

    override func viewDidLoad() {
        super.viewDidLoad()

        locHelp.checkStatus()
    }
}

尝试保存对位置帮助器的引用

它可能在视图加载后自动释放

像这样:

import UIKit

class LiveDataViewController: UIViewController {

    let locHelp = LocationHelper()

    override func viewDidLoad() {
        super.viewDidLoad()

        locHelp.checkStatus()
    }
}

不相关,但为什么要从
NSObject
继承?在Swift中,类不必从基类继承,因此除非您需要一些特定的功能,否则不要从基类继承。此外,将
locationManager
声明为隐式展开的可选项没有任何意义,只需将其声明为
let locationManager=CLLocationManager()
。也不需要将委托存储为变量,因为您甚至不给它赋值,
locationManager.delegate=self
就足够了。我认为您应该检查一下这一点,然后尝试添加这两行代码,让locHelp=LocationHelper()locHelp.checkStatus()on viewdide()嗨!我的新LocationHelper现在看起来是这样的:但是提示在一秒钟后消失。我不知道我必须更改什么,因为它是一个类级实例变量,在卸载类之前不会关闭。@wannabe_informatiker不将编辑过的代码发布到外部站点。您的问题与更新的代码无关,但您为什么继承自
NSObject
?在Swift中,类不必从基类继承,因此除非您需要一些特定的功能,否则不要从基类继承。此外,将
locationManager
声明为隐式展开的可选项没有任何意义,只需将其声明为
let locationManager=CLLocationManager()
。也不需要将委托存储为变量,因为您甚至不给它赋值,
locationManager.delegate=self
就足够了。我认为您应该检查一下这一点,然后尝试添加这两行代码,让locHelp=LocationHelper()locHelp.checkStatus()on viewdide()嗨!我的新LocationHelper现在看起来是这样的:但是提示在一秒钟后消失。我不知道我必须更改什么,因为它是一个类级实例变量,在卸载类之前不会关闭。@wannabe_informatiker不将编辑过的代码发布到外部站点。您的问题改为您的更新代码。@wannabe_informatiker,但您可以接受他的答案instead@wannabe_informatiker但是你可以接受他的回答