Использование подкласса 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, мог бы вернуть любой тип объекта.