当文本视图为空时,NSRange会导致我的应用程序崩溃。我使用的是一个自定义键盘,上面有一个后退键,它在这里调用这个代码.
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来评价它,但没有运气。
任何想法都将不胜感激!
发布于 2012-06-26 17:05:04
您应该检查字段中是否有文本,即:
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);
}
}
https://stackoverflow.com/questions/11212371
复制相似问题