2009-08-04 4 views
1

Моя дилемма заключается в следующем:переопределения классов переменных, или по крайней мере, типа переменной в Objective-C/какао

У меня есть пользовательский подкласс UIImage (я добавил некоторые методы сериализации, т.е. initWithCoder, encodeWithCoder), и Я хотел бы применить свой пользовательский подкласс как переменную к UIImageView или, по крайней мере, к подклассу UIImageView.

Как вам известно, UIImageView имеет переменную под названием «изображение», которая имеет тип UIImage. Я хотел бы переопределить эту переменную с моим подклассом.

Моя цель - иметь UIimageView, который будет реагировать на archivedDataWithRootObject без сбоев с сообщением encodeWithCoder, передаваемым в переменное изображение. Если есть более умный способ добраться туда, я открыт для предложений.

Спасибо!

[править] Я думаю, что один возможный маршрут через некоторый тип литья ... Однако:

UIImage *image = [[UIImage alloc] init]; 
MLImage *mlImage = [[MLImage alloc] init]; 
mlIamge = (MLImage*)image; 

Когда я мыши над mlImage после выполняет второй линии, я могу видеть, что это типа MLImage. Однако даже с литой, после выполнения третьей строки mlImage становится UIImage. Что мне нужно сделать, чтобы изменить тип изображения на MLImage? [/ edit]

ответ

1

Будьте осторожны с вашей терминологией. Нельзя переопределить собственность-UIImageView будет по-прежнему иметь свою собственную собственность image, она не будет заменена. Вы пытаетесь переопределить аксессоры (-image и -setImage:).

И вы правы, отливка - лучший путь. Но у вашего примера есть проблема: этот приведение является незаконным. Когда вы делаете [[UIImage alloc] init], вы создаете объект типа UIImage. Ничто не изменит это, включая ваш бросок. Кастинг - это способ сообщить компилятору (в вашем случае) «Я знаю, что вы думаете, что это UIImage*, ну, UIImage, но это действительно MLImage». В этом случае это ложь, так как это действительно UIImage - вы выделили его прямо там.

Что вы можете сделать, однако, придерживаться фактической MLImage в image свойство UIImageView. Например:

MLImage *myImage = [[MLImage alloc] init]; 
myView.image = myImage; 

А потом где-то еще:

MLImage *myImage = (MLImage *)(myView.image); 

И вы получите обратно свой пользовательский объект изображения. Но в первую очередь это должно было быть MLImage.

 Смежные вопросы

  • Нет связанных вопросов^_^