0

我只是想知道如何制作NSMutableAttributedString. 我有一个名为的属性text,我想在某个时间点保存它的内容并在发生某些事情时恢复它。我尝试创建一个名为的属性textCopy,我可以将其保存到其中,@property (nonatomic, copy)但执行此操作时出现运行时错误:

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

我将如何做到这一点?

更新了运行时错误。每当我将 NSMutableAttributedString 设置为@property (nonatomic, copy). 不明白为什么这不起作用,一般来说,无论我是否使用它的 setter 方法,复制参数似乎都不适用于 NSMutableAttributedString。

4

1 回答 1

4

问题是您已经使用属性声明了copy属性,并且可能正在使用编译器生成的设置器。编译器生成的 setter 将copy消息发送到对象以进行复制。该copy消息制作了一个不可变的副本。也就是说,它创建一个NSAttributedString而不是一个NSMutableAttributedString

解决此问题的一种方法是编写自己的使用 的设置器,mutableCopy如果您使用的是 ARC,则如下所示:

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

如果您使用手动引用计数,或者像这样:

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

另一个解决方法是textCopy使用 aNSAttributedString而不是 a NSMutableAttributedString,并将其余代码作为不可变对象使用。

于 2012-06-19T04:09:54.650 回答