CoreLocation requestWhenInUseAuthorization 闪烁一秒然后消失,或者干脆不显示

CoreLocation requestWhenInUseAuthorization flashes for a second and then disappears, or just doesn't show

我正在尝试让我的模拟器设置批准核心位置。有几次我得到了许可 window 实际上弹出,但在我可以 select “使用中”选项之前它很快就消失了。

我已经根据我在这里看到的其他类似问题和 wenderlich walkthrough 尝试了以下...

  1. 功能 > 位置 > Apple
  2. 信息 Plist 有条目...
  3. 删除应用程序并:

设置 > 通用 > 重置 > 重置位置和隐私

在 Xcode 12.4、Swift 5.1、iPhone SE - 第二代 - iOS 14.4 模拟器上使用以下代码...

import SwiftUI
import CoreLocation

struct ContentView: View {

    @Environment(\.managedObjectContext) private var viewContext

    func setupCL() {
        let locationManager = CLLocationManager()
        let clDelegate = CLDelegate()
        locationManager.delegate = clDelegate
        if locationManager.authorizationStatus == .notDetermined {
            locationManager.requestWhenInUseAuthorization()
        }
    }

    var body: some View {
        Button(action: {setupCL()}, label: {
            Text("Button")
        })
    }
}

class CLDelegate: NSObject, CLLocationManagerDelegate { }

我错过了什么?

您的 locationManager 和委托立即超出范围,因为您在视图的函数中调用它们,而不是在任何地方保留它们。将它们移动到 ObservableObject 使一切正常:


class Manager : ObservableObject {
    let locationManager = CLLocationManager()
    let clDelegate = CLDelegate()
    
    func setupCL() {
        locationManager.delegate = clDelegate
        if locationManager.authorizationStatus == .notDetermined {
            locationManager.requestWhenInUseAuthorization()
        }
    }
}

struct ContentView: View {

   @StateObject private var manager = Manager()

    var body: some View {
        Button(action: {manager.setupCL()}) {
            Text("Button")
        }
    }
}