【问题标题】:ERROR for attempting mutating immutable object尝试改变不可变对象的错误
【发布时间】:2011-11-25 10:47:45
【问题描述】:
这是什么错误?我正在使用可变类型,但它仍然无法正常工作!
错误是:
由于未捕获的异常而终止应用程序
'NSInvalidArgumentException',原因:'变异不可变
带有 deleteCharactersInRange 的对象:'
NSMutableString *line= [NSMutableString stringWithString:@"here is the string"];
[line deleteCharactersInRange: NSMakeRange(1,9 )];
【问题讨论】:
标签:
objective-c
nsmutablestring
【解决方案1】:
我的新答案:
使用您的新代码,我在最后添加了一行:
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... 里面什么都没有。而且你不能从一个没有任何内容的可变字符串中删除任何内容。
【解决方案2】:
如果您的代码看起来与您在此处引用的完全一样,那么问题在于您正试图从空字符串中删除某些内容。但既然没有什么可以删除的,那就是一个错误。
【解决方案3】:
异常名称很明确:“无效参数”。您所做的是创建一个空的可变字符串,然后尝试删除 1..9 范围内的字符,远远超出限制。此函数不能容忍超出范围:它会引发异常。
为什么你写评论“行有价值!”?您是在发布的两行代码之间生成它吗?