2

追加のデータをエンコードする必要がありますNSString(長い話です。理由は聞かないでください...)

ここでNSString概説する方法を使用してサブクラス化しました:

これらのサブクラスの 1 つをテキストとして割り当てるとUILabel's、ラベルのテキストを尋ねたときに返されることが期待されます。しかし、そうではありません。(代わりに NSString クラスター インスタンスを取得します)

MyString *string = [[MyString alloc] initWithString:@"Some string"];
UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
l.text = string;
NSString *t = l.text;  // not getting the "MyString" object

これに対する回避策はありますか?

4

2 に答える 2

6

ラベルは文字列をコピーします:

@property (nonatomic, copy) NSString *text

そのため、少なくともコピーを実装してサブクラスの型を返し、他のデータをコピーする必要があります。

(サブクラス化が最善のアイデアというわけではありません)

于 2015-12-22T11:25:54.180 に答える
0

NSString をサブクラス化すると、私よりも勇敢になり、完全に独力になります。NSString はクラス クラスタです。基本的に、それをサブクラス化して機能させるチャンスはありません。NSString init メソッドである [super init] が任意の種類のオブジェクトを返す可能性がある初期化から始まります。

于 2015-12-22T11:53:05.023 に答える