-1

NSMutableAttributedStringと一緒にCATextLayerを使用しようとしています

CATextLayer の文字列プロパティを NSMutableAttributedString に設定すると、不変の NSAttributedString に自動的に置き換えられます。

文字列プロパティとポインターを設定する前後に、文字列プロパティでクラスを呼び出した結果を確認しました。NSConcreteMutableAttributedStringを CoreTextLayer に渡し、セッターが呼び出された直後に CATextLayer にその文字列プロパティのクラスを要求すると、次の結果が得られます: NSConcreteAttributedString。また、ポインターは前後で異なります(明らかに)。

それを正しくするにはどうすればよいですか?

4

1 に答える 1

2

起こっていることに何の問題もないので、「正しくなる」ことは何もありません。ドキュメントを見るだけ!stringプロパティは次のように宣言されます。

@property(copy) id string

これはまさにあなたが見ていることを意味します: それを設定すると、それは不変のコピーを取ります。これは意図的なものです。そうでないと、レイヤーの背後で文字列が変更され、すべてが台無しになる可能性があります。実際、独自のクラスに文字列プロパティがある場合、それらは同じように機能するはずです。

文字列を変更する必要がある場合は、stringプロパティを再度設定してください。現在の値に基づいて文字列を変更する必要がある場合は、Foundation の不変/可変クラス クラスタのペアと同様に、 を取得しstring、 を作成しmutableCopy、変更し、設定します。

お気づきだと思いますが、クラスの名前は関係ありません。これはクラス クラスターなので、NSConcreteMutableAttributedString (NSMutableString ではなく) のようなプライベートな名前は関係ありません。どのような場合でも、変更可能な Foundation クラス インスタンスが変更可能かどうかをテストする方法としてクラス名を使用しないでください。オブジェクトが変更可能なメソッドに応答するかどうかを確認してください。

于 2014-05-10T17:53:28.097 に答える