如何复制一个NSMutableAttributedString

我只是想知道如何做一个NSMutableAttributedString的副本。 我有一个名为text的属性,我想将它的内容保存在某个点,并在发生某些事情时恢复它。 我试着做一个名为textCopy属性,我可以保存到@property (nonatomic, copy)但我得到一个运行时错误,当我这样做:

  -[NSConcreteAttributedString insertAttributedString:atIndex:]: unrecognized selector sent to instance. 

我将如何做到这一点?

运行时错误更新。 我得到这个随时将NSMutableAttributedString设置为@property (nonatomic, copy) 。 不明白为什么这不起作用,一般来说复制参数似乎无法与NSMutableAttributedString一起使用,无论是否使用其setter方法。

问题是你已经用copy属性声明了属性,并且大概是使用编译器生成的setter。 编译器生成的setter将copy消息发送给对象以进行复制。 copy消息使一个不可变的副本。 也就是说,它创build一个NSAttributedString而不是一个NSMutableAttributedString

解决这个问题的一个方法是编写自己的使用mutableCopy的setter,就像这样,如果你使用的是ARC:

 - (void)setTextCopy:(NSMutableAttributedString *)text { textCopy = [text mutableCopy]; } 

或者如果你正在使用手动引用计数就像这样:

 - (void)setTextCopy:(NSMutableAttributedString *)text { [textCopy release]; textCopy = [text mutableCopy]; } 

另一个解决办法是让NSAttributedString成为一个NSAttributedString而不是一个NSMutableAttributedString ,并使其余的代码作为一个不可变的对象来工作。