SwiftUI位置权限弹窗异常求助:提前弹出/点击后秒消失
问题2:点击按钮后权限弹窗仅显示1秒就消失
原因分析
看你更新后的按钮代码:
Button(action: { let locationManager = LocationManager() // 局部变量 locationManager.requestPermission() })
这里的locationManager是局部变量,当按钮的action闭包执行完毕后,这个变量就会被系统的ARC(自动引用计数)回收销毁。而CLLocationManager需要持续存在(保持强引用)才能完成权限请求的流程——系统的权限弹窗依赖于LocationManager实例的存活,一旦实例被销毁,弹窗就会被强制关闭。
解决方法
把LocationManager实例作为视图的属性持有,确保它在视图生命周期内不会被销毁:
struct TurnOnLocation: View { // 用@StateObject(iOS14+)持有实例,强引用保证实例存活 @StateObject private var locationManager = LocationManager() var body: some View { ZStack { // ... 原有视图代码 ... Button(action: { locationManager.requestPermission() }) { Text("Turn on location") // ... 按钮样式代码 ... } } } }
这样locationManager会被视图持有,直到视图被销毁,权限弹窗就能正常等待用户做出选择,不会提前消失。
内容的提问来源于stack exchange,提问作者Zorgan
相关产品推荐
相关产品推荐

