我的 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 对它进行评估,但运气不佳。
任何想法将不胜感激!
您应该检查字段中是否有文本,即:
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);
}
}
Tôi là một lập trình viên xuất sắc, rất giỏi!