用于尝试改变不可变对象的错误

时间:2011-11-25 10:47:45

标签: objective-c nsmutablestring

这是什么错误?我使用的是可变类型,但它仍无效!

错误是:

  

由于未捕获的异常而终止应用   'NSInvalidArgumentException',原因:'mutate immutable   具有deleteCharactersInRange的对象:'

NSMutableString *line= [NSMutableString stringWithString:@"here is the string"];
[line deleteCharactersInRange: NSMakeRange(1,9 )];

3 个答案:

答案 0 :(得分:0)

我的新答案:

使用新代码,我在最后添加了一行:

NSMutableString *line= [NSMutableString stringWithString:@"here is the string"];
[line deleteCharactersInRange: NSMakeRange(1,9 )];
NSLog( @"line is %@", line );

控制台输出是:

2011-11-25 06:08:13.248 TestingCommandLine[13324:903] line is he string

没有抛出异常。看起来它对我有用!

我的原始答案(原始问题):

您无法从其中没有任何内容的行中删除字符(因此例外)。

那两行信号源之间是否还有其他代码?如果没有,你有一个有效的NSMutableString ......没有任何内容。并且您无法从其中没有任何内容的可变字符串中删除任何内容。

答案 1 :(得分:0)

如果您的代码看起来与此处引用的完全一致,则问题在于您尝试从空字符串中删除某些内容。但是因为没有什么可以删除它是一个错误。

答案 2 :(得分:0)

异常名称是明确的:“无效的参数”。你所做的是创建一个空的可变字符串,然后尝试删除超出限制的1..9范围内的字符。此功能不能容忍超出范围:它会引发异常。 为什么你写评论“行有价值!”?你在你发布的两行代码之间生成它吗?