尝试改变不可变对象错误

时间:2013-01-26 20:22:28

标签: iphone ios objective-c nsstring mutable

我的代码在此行崩溃:

[(NSMutableString *)string replaceCharactersInRange:range withString:@""];

错误尝试改变不可变对象。

这是怎么回事?如何解决?

2 个答案:

答案 0 :(得分:7)

字符串不可变,强制转换不是魔术,它不会将其转换为可变字符串。你应该在一个可变副本上做到这一点:

NSMutableString* mutableString= [string mutableCopy];
[mutableString replaceCharactersInRange:range withString:@""];

答案 1 :(得分:3)

你正在对一个不可变的字符串进行类型转换,然后对其进行变异,实际上这种情况并没有发生。

您需要创建一个新的NSMutableString,然后使用replaceCharactersInRange ...

NSMutableString *mutableString=[NSMutableString stringWithString:string];
[mutableString replaceCharactersInRange:range withString:@""];

如果希望结果在同一个对象中,则将其设置为字符串。

string=mutableString;