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

iOS点击键盘上方密钥按钮触发自动填充时随机崩溃问题

iOS 16下Autofill密码视图控制器重复模态展示崩溃问题

错误信息

应用因未捕获异常NSInvalidArgumentException终止,原因:'应用尝试以模态方式展示已由<UIKeyboardHiddenViewController_Autofill: 0x106e25a10>展示的视图控制器<_SFAppAutoFillPasswordViewController: 0x106e22ee0>。'

环境

  • 系统版本:iOS 16(暂未确认其他版本是否可复现)

复现步骤

  • 点击文本框调出带有密钥按钮的系统键盘
  • 点击密钥按钮后,应用随机发生崩溃

解决方案

1. 禁止手动干预系统Autofill控制器

_SFAppAutoFillPasswordViewController由iOS系统Autofill框架自动管理,代码中禁止手动触发该控制器的模态展示操作,否则会与系统原生展示流程冲突。

2. 校验文本框Autofill配置

确保文本框的textContentType属性与业务场景匹配:

// 用户名输入框配置
usernameTextField.textContentType = UITextContentTypeUsername;
// 密码输入框配置
passwordTextField.textContentType = UITextContentTypePassword;

错误的类型配置可能导致系统Autofill流程异常,触发重复展示逻辑。

3. 添加异常捕获防护

在涉及文本框交互或模态跳转的代码块外添加异常捕获,避免应用直接崩溃:

@try {
    // 处理文本框交互或模态跳转的业务逻辑
} @catch (NSException *exception) {
    if ([exception.name isEqualToString:NSInvalidArgumentException] && 
        [exception.reason containsString:@"Autofill"]) {
        NSLog(@"Autofill模态展示冲突:%@", exception.reason);
        // 可添加友好提示逻辑
    }
}

4. iOS 16针对性适配

在触发键盘相关操作前,检查当前控制器的presentedViewController是否为Autofill相关控制器,避免重复发起展示请求:

if (@available(iOS 16.0, *)) {
    UIViewController *presentedVC = self.presentedViewController;
    NSString *vcDesc = presentedVC.class.description;
    if (presentedVC && ([vcDesc containsString:@"UIKeyboardHiddenViewController_Autofill"] || 
                        [vcDesc containsString:@"_SFAppAutoFillPasswordViewController"])) {
        return;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:31:16