使用NSMutableString属性时出错"尝试使用appendString改变不可变对象:"

时间:2014-06-01 17:27:09

标签: ios objective-c nsmutablestring declared-property

当我使用NSMutableString将字符串附加到appendString:时,我收到以下错误:

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

我的代码是:

self.partialWord = [NSMutableString stringWithCapacity:self.wordLength];
for (int i=0; i<wordLength; i++) {
    [self.partialWord appendString:@"-"];
}

在我的标题文件中:

@property (copy, nonatomic, readwrite) NSMutableString *partialWord;

我不明白为什么它说对象是不可变的,因为它是NSMutableString。为什么[self.partialWord appendString:@"-"];部分不起作用?

1 个答案:

答案 0 :(得分:5)

问题是由于您商家的copy属性造成的。为属性分配值时,它会创建一个副本。但该副本是使用copy而不是mutableCopy制作的,因此您实际上最终会为该属性分配NSString而不是NSMutableString

摆脱属性上的copy或实现您自己调用mutableCopy的自定义“setter”方法。