"Attempt to mutate immutable object with appendString" is one of the most common error while doing iOS development. This will occur due to mutability of the NSString. Lets check in detail.
As most of you know foundation framework has two types of strings
- NSString (not modifiable)
- NSMutableString (can modify)
Basing on these strings, we can have below two scenarios.
1. We can assign NSMutableString to NSString
2. We can't assign NSString to NSMutableString
Scenario #1 is perfectly valid, because NSMutableString is a subclass of NSString. But scenario #2 will crash the application and throws below error message.
"Attempt to mutate immutable object with appendString"
To avoid this problem , while doing #2, you need to make mutableCopy to make a mutable string and assign. Check below for sample code.
//Immutable string , cant modify NSString *firstName = @"Pasumarthi"; //mutable string can modify NSMutableString *nameString = [NSMutableString stringWithString:@"Chandu"]; // invalid - trying to make mutable string to non-mutable string //nameString = firstName; //invalid - we cant make normal string copy to the mutable. //nameString = [firstName copy]; // valid as mutablestring is subclass of string nameString = [firstName mutableCopy]; // valid as mutablestring is subclass of string firstName = nameString; //valid as nameString is mutable [nameString appendString:@" Appu"];