1

コードでエラー - Attempt to mutate immutable object with 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]immutableNSString *を返し、キャストしても可変にならないためです。

あなたがしたい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 に答える