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

Apple官方SwiftUI状态恢复示例中.onContinueUserActivity未触发问题

SwiftUI状态恢复:.onContinueUserActivity未触发的解决办法

针对官方SwiftUI状态恢复示例中,父视图ContentView的.onContinueUserActivity无法触发,但子视图DetailView的.userActivity正常工作的问题,可尝试以下几种排查和解决方式:

  • 确保父视图在状态恢复时处于活跃层级
    SwiftUI的.onContinueUserActivity回调仅在视图处于当前活跃的视图层级时才会被调用。如果应用启动时直接导航到DetailView,ContentView可能还未完成初始化或不在活跃视图栈中,导致回调失效。可以尝试将回调移至App结构体的Scene修饰符中,或确保ContentView始终作为根视图保持活跃。

  • 检查User Activity的系统注册
    确认Info.plist中已正确添加DetailView.productUserActivityType到NSUserActivityTypes数组中。未注册的Activity类型无法被系统正确路由,会导致回调不触发。同时验证describeUserActivity方法是否正确设置了userActivity的payload和requiredUserInfoKeys,确保数据能被正常解析。

  • 将回调移至Scene层级处理
    依赖视图层级的回调有时会受视图生命周期影响,改用Scene层级的.onContinueUserActivity更稳定:

    @main
    struct ProductApp: App {
        @State private var selectedProductID: String?
    
        var body: some Scene {
            WindowGroup {
                ContentView(selectedProductID: $selectedProductID)
            }
            .onContinueUserActivity(DetailView.productUserActivityType) { userActivity in
                if let product = try? userActivity.typedPayload(Product.self) {
                    selectedProductID = product.id.uuidString
                }
            }
        }
    }
    

    这种方式不受视图层级变化影响,能确保状态恢复逻辑被执行。

  • 严格按照正确流程测试状态恢复
    测试时需确保应用是正常后台退出(按Home键切后台后从多任务中划掉),而非Xcode直接终止运行(Xcode停止不会保存状态)。同时检查设备设置中应用的状态恢复功能是否开启(默认开启,可在设置 > [你的应用]中确认)。

内容的提问来源于stack exchange,提问作者Plan_A_is_brute_force

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:20:38