在UITextView的委托textView中调用stringByReplacingCharactersInRange是否安全:shouldChangeTextInRange:replacementText:?

时间:2013-02-04 03:52:07

标签: ios ios4 nsstring uitextview uitextviewdelegate

我实现了一个基于UITextView的自定义textview,试图收听文本更改事件。所以我实现了UITextView的委托:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    //It crashes!
    NSString *result = [textView.text stringByReplacingCharactersInRange:range withString:text];

    return YES;
}

在iOS 5和iOS 6中,上面的代码运行正常。但是在iOS 4.3中,它与异常***-[NSCFString replaceCharactersInRange:withString:]: Range or index out of bounds崩溃。 我打印了iOS 4.3中的所有变量值,有时范围确实超出范围:textView.text.length为111,range113,0。我的代码出了什么问题?谢谢!

1 个答案:

答案 0 :(得分:0)

只要在textview中进行更改,就会自动调用此方法,并且该方法非常稳定。我的猜测(正如您在上面的评论中所证实的那样)是您必须在代码中手动调用此方法,并提供不正确的范围。