Использование подкласса NSString в UILabel et.al

Мне нужно закодировать дополнительные данные в NSString (Длинная история, пожалуйста, не спрашивайте, почему...)

Я подкласс NSString используя метод, изложенный здесь:

Когда я назначаю один из этих подклассов как 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

Есть ли обходной путь для этого?

2 ответа

Решение

Метка копирует строку:

@property (nonatomic, copy) NSString *text

так что вам по крайней мере нужно реализовать copy, чтобы вернуть тип вашего подкласса и скопировать другие данные.

(не то, чтобы подклассификация была лучшей идеей)

Если вы подкласс NSString, вы храбрее, чем я когда-либо, и вы полностью самостоятельно. NSString - это кластер классов. У вас, по сути, нет шансов в аду разбить его на подклассы и заставить его работать. Он начинается с инициализации, где [super init], который был бы методом init NSString, мог бы вернуть любой тип объекта.

Другие вопросы по тегам