我尝试将 CATextLayer 与 NSMutableAttributedString 一起使用。
一旦我将CATextLayer的字符串属性设置为NSMutableAttributedString,它就会被一个不可变的NSAttributedString自动替换。
我在设置它和指针之前和之后检查了字符串属性上调用 class 的结果。 我将一个 NSConcreteMutableAttributedString 交给CoreTextLayer并在调用setter之后立即向CATextLayer询问其字符串属性的类,我得到了这个结果: NSConcreteAttributedString 。之前和之后的指针(显然)也是不同的。
我能做些什么才能做到这一点?
答案 0 :(得分:2)
发生了什么事并没有错,所以没有什么可以“正确”。看看文档吧! string
属性声明如下:
@property(copy) id string
这正是您所看到的:当您设置它时,它需要一个不可变的副本。这是故意的:如果不是这样的话,那么字符串可能会在图层的后面变异,这会抛弃一切。实际上,如果你自己的类有任何字符串属性,它们应该以相同的方式工作。
如果您需要更改字符串,只需再次设置string
属性即可。如果您需要根据其当前值更改字符串,请获取string
,制作mutableCopy
,更改并设置它 - 就像使用任何的不可变项一样/ Foundation中的/ mutable类簇对。
该类的名称是无关紧要的,因为我认为你已经意识到:它是一个类集群,所以私有名称如NSConcreteMutableAttributedString(而不是NSMutableString)都不属于你的业务。在任何情况下,都不应该使用类名作为测试可变基础类实例是否可变的方法:只需询问对象是否响应可变方法。