首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSRange崩溃应用程序

NSRange崩溃应用程序
EN

Stack Overflow用户
提问于 2012-06-26 17:01:58
回答 1查看 4K关注 0票数 0

当文本视图为空时,NSRange会导致我的应用程序崩溃。我使用的是一个自定义键盘,上面有一个后退键,它在这里调用这个代码.

代码语言:javascript
运行
复制
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);
}

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

代码语言:javascript
运行
复制
*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString replaceCharactersInRange:withString:]: Range or index out of bounds'

我的目标是让后台函数停止。我明白它为什么会崩溃,但我不知道如何解决它。我试着用NSNotFound来评价它,但没有运气。

任何想法都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-26 17:05:04

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

代码语言:javascript
运行
复制
if ( myChart.text.length > 0 )

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

代码语言:javascript
运行
复制
if ( currentRange.location >= 0 )

所以你的代码看起来就像

代码语言:javascript
运行
复制
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);
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11212371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档