2013-10-25 2 views
1

Это должно быть довольно легко и, возможно, я просто отсутствую небольшая вещь: У меня есть массив изображений называемого defaultImagesзаменить объект в изменяемом массиве

NSMutableArray *defaultLetters; 

затем добавить буквы, необходимые (длина массива, то is 42)

позже Я пытаюсь заменить одно из изображений в массиве другим изображением. Как это:

[defaultLetters replaceObjectAtIndex:0 withObject:croppedPhoto]; 

, но я получаю сообщение об ошибке сказав: "- [__ NSArrayI replaceObjectAtIndex: withObject]: непризнанные селектор направил к экземпляру 0x180ae190" есть шаг я пропускаю?

+0

, пожалуйста, покажите нам, как вы присваиваете что-то 'defaultLetters' – vikingosegundo

ответ

7

Я думаю, что вы присвоить значение, как это

defaultLetters = anotherMutableArray; 

Если вам нравится это, то, пожалуйста, замените ниже ..

defaultLetters = [anotherMutableArray mutableCopy]; 

Атер вы можете заменить объект в этом массиве

[defaultLetters replaceObjectAtIndex:0 withObject:croppedPhoto]; 

Попробуйте это. Потому что, если вы прямо назначаете, вы не можете вставлять или удалять.

+0

спасибо! работает! mutableCopy был ключевым ... – suMi

+1

@suMi: Хорошо, что вы прямо назначаете, вы не можете вставлять или удалять .. – TamilKing

7

Объект NSArray присвоен defaultLetters, а не NSMutableArray.

__NSArrayI является частным подклассом NSArray. I означает неизменяемость.

см What is __NSArrayI and __NSArrayM? How to convert to NSArray?


, если вы не можете сказать наверняка, если это NSArray или NSMutableArray вы назначаете, вы всегда испытание.

if(![defaultLetters respondsToSelector:@selector(replaceObjectAtIndex:withObject:)]){ 
    defaultLetters = [defaultLetters mutableCopy]; 
} 

Но это может указывать на архитектурную проблему в вашем коде, поскольку вы должны точно знать, с какими объектами вы имеете дело.

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