Ios 在Objective-C中迭代NSCountedSet时创建NSMutableString时出错

Ios 在Objective-C中迭代NSCountedSet时创建NSMutableString时出错,ios,objective-c,nsmutablestring,nscountedset,Ios,Objective C,Nsmutablestring,Nscountedset,我在for循环中迭代一个NSCountedSet,然后尝试创建一个NSMutableString,它由它所持有的NSString对象以及该特定对象的计数组成,然后将新创建的NSMutableString插入到NSMutableArray中。但是,当我执行此操作时,会出现以下错误: Attempt to mutate immutable object with appendFormat 以下是我正在使用的代码: for (NSMutableString *myString in myCo

我在for循环中迭代一个NSCountedSet,然后尝试创建一个NSMutableString,它由它所持有的NSString对象以及该特定对象的计数组成,然后将新创建的NSMutableString插入到NSMutableArray中。但是,当我执行此操作时,会出现以下错误:

Attempt to mutate immutable object with appendFormat
以下是我正在使用的代码:

    for (NSMutableString *myString in myCountedSet) {

        [myString appendFormat:@"-%lu", (unsigned long)[myCountedSet countForObject:myString]];
        [myArray addObject:myString];
    }

我只是尝试为NSCountedSet中的每个对象构造一个如下形式的字符串:myString count,然后将该字符串插入数组中。有人知道我做错了什么吗?

我猜你的字符串实际上是不可变的。因此,将代码更改为:

for (NSMutableString *myString in myCountedSet) {

    NSString *combinedString = [NSString stringWithFormat:@"%@-%lu", myString,(unsigned long)[myCountedSet countForObject:myString]];
    [myArray addObject:combinedString];
}

字符串实际上是可变的吗?如何创建它们?NSCountedSet已包含NSString对象。如果在循环的第一行设置断点,然后在lldb窗口中键入:
po[myString class]
,您会看到什么?我理解。它包含NSString而不是NSMutableString。这就是为什么我问你是如何创建它们的。如果它们包含NSString对象,我应该做些不同的事情吗?非常感谢您的及时回复。行:[myArray combinedString]=[myArray addObject:combinedString]?这是一个打字错误,我现在已经修复了它。将第1行更改为for(myCountedSet中的NSString*myString){?这样会更好,并且在尝试追加时会给您一个警告。并且-no-不要用NSMutableStrings填充计数集。集合依赖于它们的条目是不可变的。请考虑如果您执行以下操作会发生什么:NSMutableString*s=[NSMUTABLESTRINGTHISTRING:@“where”];[set-addObject:s];[set-addObject:s];//现在您有了which->count 2..现在更改字符串…在集合中搜索@“which”时会发生什么?