Возможно, потому что ваш звонок в indexOfObject
возвращается NSNotFound
.
NSNotFound
является константой, которая говорит вам, что oldString
объект не найден в вашем self.myArray
словаре, и как эта константа имеет значение (NSUInteger)-1
(что эквивалентно значение без знака 2147483647
из-за целые сгущенным), значение, которое будет очевидно, сбой вашего приложения с исключением «Вне пределов».
Решение должно проверить, есть ли index != NSNotFound
перед его использованием. Или чтобы убедиться, что ваш массив self.myArray
действительно содержит объект типа NSString
, значение которого равно "oldObject"
.
Если, учитывая ваш фактический код, вы ожидали oldObject
присутствовать в вашем self.myArray
, то подумайте еще раз, может быть, необходимо войти содержание self.myArray
для поиска того, что он на самом деле содержит, а также проверить, что это содержание является строкой.
(если вы видите "oldObject"
при входе содержания вашего myArray
, что, вероятно, только description
строки объекта в массиве, поэтому массив не содержит строки "oldObject"
самих, но объект, описание "oldObject"
)
Примечание стороны: нет необходимости использовать stringWithFormat
, если вы не используете какой-либо формат заполнитель (например, %d
или %@
и т.д.). Вы должны просто использовать константу строки в этом случае, не нужно динамически строить строку, если эта строка является константой: просто используйте NSString* oldString = @"oldObject"
и NSString* toReplace = @"newObject"
.
2147483647 NSNotFound. Где инициализируется myArray и где добавлена старая строка? – vadian
BTW - избавиться от ненужного использования 'stringWithFormat:'. Просто сделайте 'NSString * oldString = @" oldObject ";'. – rmaddy