如何复制一个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
,并使其余的代码作为一个不可变的对象来工作。