我的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);
}
如果我在textview中有文本,这对于一次删除一个字符非常有效,但是当我到达textview的开头并且没有其他字符时,我得到异常并崩溃......
*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString replaceCharactersInRange:withString:]: Range or index out of bounds'
我的目标是让退格功能停止。我明白为什么它会崩溃,但我不知道如何解决它。我试过没有运气对NSNotFound进行评估。
任何想法都会非常感激!
答案 0 :(得分: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);
}
}