You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:08:12