【问题标题】:Attempt to mutate immutable object error尝试改变不可变对象错误
【发布时间】:2013-01-26 20:22:27
【问题描述】:

我的代码在这一行崩溃:

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

尝试改变不可变对象时出错。

这是怎么回事,我该如何解决?

【问题讨论】:

  • 现在您要返回阅读 C 语言类型转换的教程。现在。

标签: iphone ios objective-c nsstring mutable


【解决方案1】:

字符串不是可变的,强制转换不是魔法,它不会把它变成可变字符串。您应该在可变副本上执行此操作:

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

【讨论】:

  • +1 表示“铸造不是魔术”。我倾向于说完全相同的话。
  • 是的,但您可能希望先将可变版本存储在变量中,否则对您没有多大好处。
【解决方案2】:

您正在对不可变字符串进行类型转换,然后对其进行变异,实际上这并没有发生。

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

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

如果您希望在同一对象中得到结果,请将其设置为字符串。

string=mutableString;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多