0

我有一个 NSRange 问题,导致我的应用程序在 textview 为空时崩溃。我正在使用一个自定义键盘,上面有一个退格按钮,它在这里调用这个代码......

if ([self.myChart isFirstResponder]) {
    NSRange currentRange = myChart.selectedRange;
    if (currentRange.length == 0) {
        currentRange.location--;
        currentRange.length++;
    }
    myChart.text = [myChart.text stringByReplacingCharactersInRange:currentRange withString:[NSString string]];
    currentRange.length = 0;
    myChart.selectedRange = currentRange;

    NSLog(@"%d", NSNotFound);
}

如果我在文本视图中有文本,这非常适合一次删除一个字符但是当我到达文本视图的开头并且没有更多字符时,我会得到异常并崩溃......

*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString replaceCharactersInRange:withString:]: Range or index out of bounds'

我的目标是停止退格功能。我明白它为什么会崩溃,但我不知道如何解决它。我试过用 NSNotFound 评估它,但没有运气。

任何想法将不胜感激!

4

1 回答 1

4

您应该检查该字段中是否有文本,即:

if ( myChart.text.length > 0 )

并检查以确保您没有尝试访问位置-1:

if ( currentRange.location >= 0 )

所以你的代码看起来像

if ([self.myChart isFirstResponder] && myChart.text.length > 0 ) {
    NSRange currentRange = myChart.selectedRange;
    if (currentRange.length == 0) {
        currentRange.location--;
        currentRange.length++;
    }
    if ( currentRange.location >= 0 )
    {
        myChart.text = [myChart.text stringByReplacingCharactersInRange:currentRange withString:[NSString string]];
        currentRange.length = 0;
        myChart.selectedRange = currentRange;

        NSLog(@"%d", NSNotFound);
    }
}
于 2012-06-26T17:05:04.657 回答