2015-07-05 4 views
3

Я пытаюсь заменить объект из моего массива на строку. Я используюзаменить объект в NSMutableArray

@property (strong, nonatomic) NSMutableArray *myArray; 

NSString *oldString = [NSString stringWithFormat:@"oldObject"]; 
NSString *toReplace = [NSString stringWithFormat:@"newObject"]; 

NSUInteger index = [self.myArray indexOfObject:oldString]; 
[self.firstLanguageArray replaceObjectAtIndex:index withObject:toReplace]; 

Но каждый раз, когда я пытаюсь заменить, приложение вылетает.

Редактировать: Я зарегистрировал «индекс». Я стану целочисленным, как 2147483647.

+1

2147483647 NSNotFound. Где инициализируется myArray и где добавлена ​​старая строка? – vadian

+0

BTW - избавиться от ненужного использования 'stringWithFormat:'. Просто сделайте 'NSString * oldString = @" oldObject ";'. – rmaddy

ответ

4

Возможно, потому что ваш звонок в 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".

Смежные вопросы