CoreLocation requestWhenInUseAuthorization 闪烁一秒然后消失,或者干脆不显示
CoreLocation requestWhenInUseAuthorization flashes for a second and then disappears, or just doesn't show
我正在尝试让我的模拟器设置批准核心位置。有几次我得到了许可 window 实际上弹出,但在我可以 select “使用中”选项之前它很快就消失了。
我已经根据我在这里看到的其他类似问题和 wenderlich walkthrough 尝试了以下...
- 功能 > 位置 > Apple
- 信息 Plist 有条目...
- 删除应用程序并:
设置 > 通用 > 重置 > 重置位置和隐私
在 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")
}
}
}
我正在尝试让我的模拟器设置批准核心位置。有几次我得到了许可 window 实际上弹出,但在我可以 select “使用中”选项之前它很快就消失了。
我已经根据我在这里看到的其他类似问题和 wenderlich walkthrough 尝试了以下...
- 功能 > 位置 > Apple
- 信息 Plist 有条目...
- 删除应用程序并:
设置 > 通用 > 重置 > 重置位置和隐私
在 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")
}
}
}