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

SwiftUI中RTIInputSystemClient会话ID无效错误求助

解决登录/创建账户触发的RTIInputSystemClient会话ID无效错误

控制台输出错误:

-[RTIInputSystemClient remoteTextInputSessionWithID:performInputOperation:] perform input operation requires a valid sessionID

问题根源排查

从你提供的AuthView代码来看,主要有几个可能触发该错误的点:

  1. 键盘隐藏方式不安全:使用UIApplication.shared.sendAction强制调用resignFirstResponder,可能破坏SwiftUI输入系统的会话管理,导致后续输入会话异常。
  2. 冗余状态变量导致的状态不同步:storedEmail/storedPassword属于多余变量,TextField已经直接绑定email/password状态,额外的onChange和onSubmit赋值操作会引发不必要的状态更新,干扰输入系统的正常流程。
  3. 未利用SwiftUI原生焦点管理:声明了@FocusState变量但未绑定到输入框,放弃了SwiftUI对输入焦点的安全管理机制。

修改后的代码方案

import SwiftUI
import Combine

struct IdentifiableError: Identifiable {
    let id = UUID()
    let message: String
}

struct AuthView: View {
    @ObservedObject var viewModel: JobApplicationViewModel
    @State private var email: String = ""
    @State private var password: String = ""
    @State private var identifiableError: IdentifiableError?
    @FocusState private var focusedField: Field? // 明确绑定输入框焦点

    // 定义焦点枚举,区分不同输入框
    enum Field {
        case email, password
    }

    var body: some View {
        VStack {
            Image(systemName: "briefcase.fill")
                .resizable()
                .scaledToFit()
                .frame(width: 120, height: 120)
                .padding()

            Text("Welcome to Job Tracker Pro")
                .font(.largeTitle)

            TextField("Email", text: $email)
                .autocapitalization(.none)
                .keyboardType(.emailAddress)
                .disableAutocorrection(true)
                .padding()
                .border(Color.gray)
                .focused($focusedField, equals: .email) // 绑定焦点

            SecureField("Password", text: $password)
                .padding()
                .border(Color.gray)
                .focused($focusedField, equals: .password) // 绑定焦点

            Button("Log In") {
                focusedField = nil // 通过FocusState安全隐藏键盘
                viewModel.logIn(email: email, password: password) { success, message in
                    // 处理登录结果
                }
            }
            .padding()

            Button("Create Account") {
                focusedField = nil // 通过FocusState安全隐藏键盘
                viewModel.createAccount(email: email, password: password) { success, message in
                    // 处理账户创建结果
                }
            }
            .padding()
        }
        .alert(item: $identifiableError) { error in
            Alert(
                title: Text("Error"),
                message: Text(error.message),
                dismissButton: .default(Text("OK")) {
                    identifiableError = nil
                }
            )
        }
        .onReceive(viewModel.$error) { error in
            if let error = error {
                identifiableError = IdentifiableError(message: error.localizedDescription)
            }
        }
    }
}

额外排查建议

  • 检查JobApplicationViewModel中的logIn/createAccount方法:确保所有UI相关的回调操作都在主线程执行(可通过DispatchQueue.main.async包裹),后台线程操作UI可能引发输入系统异常。
  • 测试环境验证:尝试在真机上运行,部分模拟器的输入系统模拟可能存在bug;同时检查是否为特定iOS版本问题(比如iOS 15/16的输入系统已知小问题)。
  • 清理缓存:清理Xcode的DerivedData,重启Xcode和模拟器,排除编译缓存导致的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:42:42