Ser*_*nce 1 objective-c nsattributedstring
我想知道如何才能复制一份NSMutableAttributedString. 我有一个名为的属性text,我想在某个时刻保存其内容并在发生某些情况时恢复到它。我尝试创建一个名为textCopywhere 我可以将其保存到的属性@property (nonatomic, copy),但是当我这样做时出现运行时错误:
-[NSConcreteAttributedString insertAttributedString:atIndex:]:发送到实例的无法识别的选择器。
我将如何实现这个目标?
每当我将 设为 时,我都会收到此NSMutableAttributedString消息@property (nonatomic, copy)。我不明白为什么这行不通。NSMutableAttributedString一般来说,无论我是否使用它的 setter 方法,复制参数似乎都不起作用。
问题是您已经使用copyattribute 声明了该属性,并且可能正在使用编译器生成的 setter。编译器生成的 setter 将消息发送copy到对象以进行复制。该copy消息会生成一个不可变的副本。也就是说,它创建的是NSAttributedString,而不是NSMutableAttributedString.
解决此问题的一种方法是编写自己的使用 的 setter mutableCopy,如果您使用 ARC,则如下所示:
- (void)setTextCopy:(NSMutableAttributedString *)text {
textCopy = [text mutableCopy];
}
Run Code Online (Sandbox Code Playgroud)
或者如果您使用手动引用计数,则如下所示:
- (void)setTextCopy:(NSMutableAttributedString *)text {
// Careful copy/release dance in case text and textCopy
// are the same object.
id old = textCopy;
textCopy = [text mutableCopy];
[old release];
}
Run Code Online (Sandbox Code Playgroud)
另一个修复方法是使用textCopybe anNSAttributedString而不是 an NSMutableAttributedString,并使代码的其余部分将其作为不可变对象使用。
| 归档时间: |
|
| 查看次数: |
4568 次 |
| 最近记录: |