0

次のエラーが表示されます。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with replaceCharactersInRange:withString:'

しかし、どの不変オブジェクトを変更しているのかわかりません。

        NSRange subRange = [self.label.text rangeOfString: @"="];
        int numA = 5;
        int numB = 3;

        NSMutableString *mixed = [NSString stringWithFormat: @"%i %i", numA, numB];

        NSMutableString *string = [NSString stringWithString: self.label.text];

        subRange = [string rangeOfString: @"="];

        if (subRange.location != NSNotFound)
            [string replaceCharactersInRange:subRange withString:mixed];
4

3 に答える 3

6

あなたのNSMutableString作成呼び出しは適切にバランスが取れていません。を作成していることをコンパイラに約束していますが、インスタンスを作成するNSMutableStringように依頼しています。NSString

例えば:

NSMutableString *mixed = [NSString stringWithFormat: @"%i %i", numA, numB];

する必要があります:

NSMutableString *mixed = [NSMutableString stringWithFormat: @"%i %i", numA, numB];

于 2013-03-18T01:19:19.453 に答える
1

あなたNSMutableStringの は実際には のインスタンスですNSString。これはランタイムの詳細ですが、少なくともこれらの行には警告が表示されるはずです。への変更:

NSMutableString *string = [self.label.text mutableCopy];
于 2013-03-18T01:19:52.670 に答える
0

NSMutableString次のように作成する必要があります。

[NSMutableString stringWithString: self.label.text];
于 2013-03-18T01:19:14.573 に答える