我的困境如下:
我有一个UIImage的自定义子类(我添加了一些序列化方法,即initWithCoder,encodeWithCoder),我想将我的自定义子类作为变量应用于UIImageView,或者至少是UIImageView的子类。
如您所知,UIImageView有一个名为“image”的变量,它是UIImage类型。我想用我的子类覆盖这个变量。
我的目标是拥有一个UIimageView,它将响应archivedDataWithRootObject而不会因为encodeWithCoder消息被发送到变量图像而崩溃。如果有更聪明的方法,我愿意接受建议。
谢谢!
[edit]我认为一种可能的路线是通过某种类型的铸造...但是:
UIImage *image = [[UIImage alloc] init];
MLImage *mlImage = [[MLImage alloc] init];
mlIamge = (MLImage*)image;
当我在第二行执行后鼠标悬停在mlImage上时,我可以看到它是MLImage类型。但是,即使使用强制转换,在第三行执行后,mlImage也会成为UIImage。如何将图像类型更改为MLImage? [/编辑]
答案 0 :(得分:1)
小心你的术语。 覆盖属性是不可能的 - UIImageView
仍然拥有自己的image
属性,它不会被替换。您正试图覆盖访问者(-image
和-setImage:
)。
你是对的,施法是一条更好的路线。但是你的例子有一个问题:演员是非法的。执行[[UIImage alloc] init]
时,您正在创建UIImage
类型的对象。什么都不会改变,包括你的演员。转换是告诉编译器的一种方式(在你的情况下)“我知道你认为这个UIImage*
是UIImage
,但它确实是MLImage
。”在这种情况下,这是一个谎言,因为它确实是UIImage
- 你在那里分配了它。
例如:
MLImage
然后在其他地方:
image
您将获得自定义图像对象。但它首先必须是UIImageView
。