YYTextView setMarkedText: 越界

该博客主要讨论了在YYTextView中遇到的越界问题,并提供了具体的解决方法。在YYTextView.m文件的1471行、3347行和3351行添加越界检查条件,确保在替换或插入文本时不会超出innerText的长度,从而避免程序崩溃。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在YYTextView.m里1471,3347,3351行加越界判断即可:

1471:

if(range.asRange.location+range.asRange.length<=_innerText.length) {

        if(notify) [_inputDelegatetextWillChange:self];

        NSRangenewRange =NSMakeRange(range.asRange.location, text.length);

        [_innerText replaceCharactersInRange:range.asRange withString:text];

        [_innerText yy_removeDiscontinuousAttributesInRange:newRange];

        if(notify) [_inputDelegatetextDidChange:self];

    }

3347:

if (_markedTextRange == nil) {

        _markedTextRange = [YYTextRange rangeWithRange:NSMakeRange(_selectedTextRange.end.offset, markedText.length)];

        if (_selectedTextRange.end.offset<=_innerText.length) {

            [_innerText replaceCharactersInRange:NSMakeRange(_selectedTextRange.end.offset, 0) withString:markedText];

        }

        _selectedTextRange = [YYTextRange rangeWithRange:NSMakeRange(_selectedTextRange.start.offset + selectedRange.location, selectedRange.length)];

    }else{

        _markedTextRange = [self _correctedTextRange:_markedTextRange];

        if(_markedTextRange.asRange.location+_markedTextRange.asRange.length<=_innerText.length) {

            [_innerText replaceCharactersInRange:_markedTextRange.asRange withString:markedText];

        }

        _markedTextRange = [YYTextRange rangeWithRange:NSMakeRange(_markedTextRange.start.offset, markedText.length)];

        _selectedTextRange = [YYTextRange rangeWithRange:NSMakeRange(_markedTextRange.start.offset + selectedRange.location, selectedRange.length)];

    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值