gpt4 book ai didi

iphone - 如何复制 NSMutableAttributedString

转载 作者:行者123 更新时间:2023-11-28 19:18:04 27 4
gpt4 key购买 nike

我只是想知道如何制作 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 消息生成一个不可变 副本。也就是说,它创建了一个 NSAttributedString不是 NSMutableAttributedString

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

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

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

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

另一个修复方法是使 textCopy 成为 NSAttributedString 而不是 NSMutableAttributedString,并使您的其余代码与它一起工作一个不可变的对象。

关于iphone - 如何复制 NSMutableAttributedString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11084655/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com