1

为什么代码给出错误 - 尝试使用 appendFormat: 改变不可变对象?

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];

for (NSTextTestingResult *match in matches) {
    <omitted>
    NSMutableString *value;
    value = (NSMutableString *)[response stringWithRange:range];
    if ([dict objectForKey:@"traveler"])
        [dict objectForKey:@"traveler"] appendFormat:@"%@", value];     //  Errors here

[dict setObject:value forKey:key];
}

价值被创造为_NSCFString.

4

2 回答 2

4

因为[response stringWithRange:range]返回一个不可变的NSString *,并且强制转换不会使它变得可变。

你想要value = [[response stringWithRange:range] mutableCopy];

请注意,如果您不使用 ARC,则需要记住释放mutableCopy. 尽管 的返回值[response stringWithRange:range]是自动释放的,但mutableCopy不是。

于 2013-08-11T00:07:58.733 回答
2

我认为您不能像那样将字符串转换为可变的。

你需要这样做

ms = [[NSMutableString alloc] init];
[ms setString:immutableString];

哎呀,子类的工作方式又错了,你应该能够更简单地做到这一点。

ms = [NSMutableString stringWithString: immutableString];
于 2013-08-11T00:00:52.303 回答