ReplacingCharactersInRange 越界错误

问题描述 投票:0回答:1

我有一个接受数字的文本字段,我试图用“.”替换字符串中的第 8 个字符

if(self.txtQty.text.length >= 8){
    NSRange range = NSMakeRange(8,1);
    self.txtQty.text = [self.txtQty.text stringByReplacingCharactersInRange:range withString:@"."];
}

-例子-
1234567.90

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFString replaceCharactersInRange:withString:]: Range or index out of bounds” *** 首先抛出调用栈:

我一直收到这个错误。

ios objective-c indexoutofboundsexception invalidargumentexception
1个回答
0
投票

范围

{8,1}
表示您正在尝试访问第 9 个字符。但是您的
if
检查仅验证字符串是否包含 8 个或更多字符。因此,如果字符串恰好是 8 个字符长,那么您将收到该错误消息。

将您的

if
支票更新为:

if (self.txtQty.text.length > 8) {

或者您的

if
检查可能是正确的,范围应从
{8,1}
更改为
{7,1}
以替换第 8 个字符。

这两个更改中的哪一个取决于您的目标(更改第 8 个或第 9 个字符)。


为了帮助可视化范围,我将尝试一些绘图:

一些字符串,它的索引和范围

{8,1}

 1 2 3 4 5 6 7 8 9 0   <-- The string
| | | | | | | | | | |
0 1 2 3 4 5 6 7 8 9 1  <-- Its indexes
                    0
                ***    <-- Area for {8,1}

在这里你可以看到范围

{8,1}
正在获得第9个字符。

© www.soinside.com 2019 - 2024. All rights reserved.