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

iOS15 UITextView拖动后报Invalid parameter not satisfying: pos崩溃求解决

问题根因

该崩溃是iOS 13~15版本UITextKit的已知系统缺陷,触发于用户执行粘贴操作时,系统内部UITextPasteController校验文本位置参数失败,当粘贴内容格式复杂、粘贴过程中文本选中范围被修改、文本长度发生异步变更时均会触发。

可落地解决方案

  • 方案1:重写UITextView的粘贴逻辑,替换系统默认实现
    自定义UITextView子类,重写paste:方法,手动校验选中范围合法性后再执行粘贴,不走系统原生粘贴的崩溃流程,参考代码如下:
    - (void)paste:(id)sender {
        NSRange selectRange = self.selectedRange;
        // 校验选中范围合法性,不合法直接拦截粘贴
        if (selectRange.location == NSNotFound 
            || selectRange.location + selectRange.length > self.textStorage.length) {
            return;
        }
        UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
        // 非文本内容依然走系统逻辑
        if (!pasteboard.hasStrings) {
            [super paste:sender];
            return;
        }
        // 手动执行文本替换,兼容原有delegate回调
        [self replaceRange:self.selectedTextRange withText:pasteboard.string];
    }
    
    Swift版本参考:
    override func paste(_ sender: Any?) {
        let selectRange = selectedRange
        guard selectRange.location != NSNotFound,
              selectRange.location + selectRange.length <= textStorage.length else {
            return
        }
        guard let pasteStr = UIPasteboard.general.string, !pasteStr.isEmpty else {
            super.paste(sender)
            return
        }
        replace(selectedTextRange ?? UITextRange(), withText: pasteStr)
    }
    
  • 方案2:全局异常捕获兜底
    若业务侧不方便修改所有UITextView实例,可添加全局异常捕获逻辑,仅拦截匹配特征的崩溃避免影响用户使用:
    捕获NSInternalInconsistencyException异常后,判断异常reason包含Invalid parameter not satisfying: pos、调用栈包含-[_UITextKitTextPosition compare:]时,直接忽略该异常,注意不要无差别吞掉所有异常避免遗漏其他业务问题。
  • 方案3:优化delegate回调逻辑
    检查UITextViewDelegate的textView:shouldChangeTextInRange:replacementText:实现,不要在该方法内做异步修改文本、异步修改选中范围的操作,所有文本相关变更同步执行,避免系统粘贴流程执行过程中文本状态发生变化导致参数越界。
  • 方案4:系统版本适配
    该问题在iOS 16及以上版本已被官方修复,若App最低支持版本可升级至iOS 16,无需额外修改即可解决该崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:39:01