2015-02-11 8 views
-1

Я выполняю итерацию NSCountedSet в цикле for, а затем пытаюсь создать NSMutableString, состоящую из объекта NSString, который он хранит, а также подсчитать для этого конкретного объекта, а затем вставить вновь созданный NSMutableString в NSMutableArray. Однако, когда я делаю это, я получаю следующее сообщение об ошибке:Получение ошибки при создании NSMutableString при итерации NSCountedSet в Objective-C

Attempt to mutate immutable object with appendFormat 

Вот мой код, что я работаю с:

for (NSMutableString *myString in myCountedSet) { 

     [myString appendFormat:@"-%lu", (unsigned long)[myCountedSet countForObject:myString]]; 
     [myArray addObject:myString]; 
    } 

Я просто пытаюсь построить строку вида: myString-count для каждого объекта в NSCountedSet, а затем вставить эту строку в массив. Кто-нибудь может понять, что я делаю неправильно?

Заранее благодарим всех, кто отвечает.

+0

Действительно ли струны изменяются? Как вы их создаете? –

+0

В NSCountedSet уже есть объекты NSString. – syedfa

+0

Если вы установили точку останова в первой строке в вашем цикле, а затем введите в lldb-окно: 'po [myString class]', что вы видите? –

ответ

1

Не собирайтесь гадать, что ваши строки на самом деле не изменяемы. Поэтому измените код:

for (NSMutableString *myString in myCountedSet) { 

    NSString *combinedString = [NSString stringWithFormat:@"%@-%lu", myString,(unsigned long)[myCountedSet countForObject:myString]]; 
    [myArray addObject:combinedString]; 
} 
+0

Большое спасибо за ваш быстрый ответ. Строка: [myArray togetherString] = [myArray addObject: объединенная строка]? – syedfa

+0

Это была опечатка, я исправил ее сейчас –

+1

Изменить строку 1 для (NSString * myString в myCountedSet) {? – KirkSpaziani