0

I have a textfield that accepts numbers and I am trying to replace the 8th character in the string with a "."

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

-Example-
1234567.90

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString replaceCharactersInRange:withString:]: Range or index out of bounds' *** First throw call stack:

I keep receiving this error.

HangarRash
  • 7,314
  • 5
  • 5
  • 32
Daniel98
  • 3
  • 3

1 Answers1

0

The range {8,1} means you are trying to access the 9th character. But your if check only verifies if the string has 8 or more characters. So if the string is exactly 8 characters long then you will get that error.

Update your if check to:

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

Or possibly your if check is correct and the range should be changed from {8,1}, to {7,1} to replace the 8th character.

Which of those two changes you make depends on your goal (to change the 8th or 9th character).


To help visualize the range, I'll attempt a bit of a drawing:

Some string, its indexes, and range {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}

Here you can see that the range {8,1} is getting the 9th character.

HangarRash
  • 7,314
  • 5
  • 5
  • 32