【问题标题】: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 范围内的字符,远远超出限制。此函数不能容忍超出范围:它会引发异常。 为什么你写评论“行有价值!”?您是在发布的两行代码之间生成它吗?

      【讨论】:

        猜你喜欢
        • 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
        相关资源
        最近更新 更多