【问题标题】:override classes variable, or at least variable type in objective-c / cocoa覆盖类变量,或者至少是objective-c / cocoa中的变量类型
【发布时间】:2009-08-04 22:49:58
【问题描述】:

我的困境如下:

我有一个 UIImage 的自定义子类(我添加了一些序列化方法,即 initWithCoder、encodeWithCoder),我想将我的自定义子类作为变量应用到 UIImageView,或者至少是 UIImageView 的子类。

如您所知,UIImageView 有一个名为“image”的变量,它的类型为 UIImage。我想用我的子类覆盖这个变量。

我的目标是让 UIimageView 响应 archivedDataWithRootObject 而不会崩溃,并将 encodeWithCoder 消息发送到变量图像。如果有更聪明的方法可以到达那里,我愿意接受建议。

谢谢!

[编辑] 我认为一种可能的途径是通过某种类型的铸造......但是:

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

当我在第二行执行后将鼠标悬停在 mlImage 上时,我可以看到它是 MLImage 类型的。但是,即使使用强制转换,在第三行执行 mlImage 之后也会变成 UIImage。我需要做什么才能将图像类型更改为 MLImage? [/编辑]

【问题讨论】:

    标签: overriding nscoding


    【解决方案1】:

    请注意您的术语。无法覆盖属性—UIImageView 仍将拥有自己的image 属性,不会被替换。您正在尝试覆盖 访问器-image-setImage:)。

    你是对的,投射是一条更好的路线。但是您的示例有一个问题:该演员表是非法的。当您执行[[UIImage alloc] init] 时,您正在创建UIImage 类型的对象。没有什么能改变这一点,包括你的演员。强制转换是一种告诉编译器(在你的情况下)“我知道你认为这个UIImage* 是一个UIImage,但它实际上是一个MLImage。”在这种情况下,这是一个谎言,因为它确实是一个UIImage——你就在那里分配了它。

    可以做的是将实际的MLImage 粘贴到UIImageViewimage 属性中。例如:

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

    然后在其他地方:

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

    然后您将取回您的自定义图像对象。但首先它必须是MLImage

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      相关资源
      最近更新 更多