2013-03-18 6 views
0

Я получаю эту ошибку:Как исправить эту мутирующую ошибку?

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with replaceCharactersInRange:withString:'

Но я не могу понять, что неизменный объект я мутирую.

 NSRange subRange = [self.label.text rangeOfString: @"="]; 
     int numA = 5; 
     int numB = 3; 

     NSMutableString *mixed = [NSString stringWithFormat: @"%i %i", numA, numB]; 

     NSMutableString *string = [NSString stringWithString: self.label.text]; 

     subRange = [string rangeOfString: @"="]; 

     if (subRange.location != NSNotFound) 
      [string replaceCharactersInRange:subRange withString:mixed]; 
+1

Ваша строковая переменная не изменена, и вы пытались ее мутировать. – Jeremy

+0

дубликат http://stackoverflow.com/questions/14541212/attempt-to-mutate-immutable-object-error http://stackoverflow.com/questions/8267956/error-for-attempting-mutating-immutable-object – Sebastian

ответ

6

Ваши NSMutableString вызовы создания не сбалансированы должным образом. Вы обещаете компилятору, что вы создаете NSMutableString, но вы спросите NSString, чтобы создать экземпляр.

Например:

NSMutableString *mixed = [NSString stringWithFormat: @"%i %i", numA, numB];

должно быть:

NSMutableString *mixed = [NSMutableString stringWithFormat: @"%i %i", numA, numB];

0

Вам нужно создать NSMutableString вроде этого:

[NSMutableString stringWithString: self.label.text]; 
1

Ваши NSMutableString s фактически экземпляры NSString. Это детали времени выполнения, хотя по крайней мере должно быть предупреждение для этих строк. Перейдите на:

NSMutableString *string = [self.label.text mutableCopy]; 
Смежные вопросы