继承自UIIMage问题

111*_*110 1 iphone inheritance objective-c uiimage

我从UIImage创建了类ChImage

@interface ChImage : UIImage {
@public
    int ChannelId;
    NSString *ChannelName;
    NSString *Description;

}

@property(nonatomic, retain) NSString *ChannelName;
@property(nonatomic, retain) NSString *Description;

@end

@implementation ChImage


@synthesize ChannelName;
@synthesize Description;

@end
Run Code Online (Sandbox Code Playgroud)

并在代码中使用它:

ChImage *cho = [ChImage imageNamed:img];
        cho = [ChImage imageNamed:img];
        cho.ChannelName = @"something here...";
Run Code Online (Sandbox Code Playgroud)

在行cho.ChannelName应用程序中断.我需要扩展UIImage,因为我需要在该类中有一些额外的属性,但我不知道我做错了什么?

此外,当我尝试从UIImageView获取图像时,我收到了错误.我不知道这是否有上层问题:

UIImageView *iw = (UIImageView*) sender;
    ChImage *im = (ChImage*) iw.image;
Run Code Online (Sandbox Code Playgroud)

我只是尝试转换代码的另一部分,它的工作原理.问题必须在点击处理方法中.这是方法:

- (void)imageTapped:(UIGestureRecognizer *)sender
{
    UIImageView *iw = (UIImageView*) sender;
    ChImage *im = (ChImage*) iw.image;
    NSLog(im.ChannelName);

}
Run Code Online (Sandbox Code Playgroud)

这是一个uiscrollview,里面的图像是我如何将点击事件附加到每个图像:

for (imageToAdd in arrayOfImages)
    {               
        UIImageView *temp = [[UIImageView alloc] initWithImage:imageToAdd];     

        temp.frame = CGRectMake(x, y, 29, 29);
        temp.userInteractionEnabled = YES;      
        x += 29;        

        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageTapped:)];
        [temp addGestureRecognizer:tap];    

        [scrollView addSubview:temp];

    }
Run Code Online (Sandbox Code Playgroud)

Pey*_*loW 5

不推荐使用子类UIImage,它是一个OO层,CGImageRef并且涉及很多魔法.

您可以创建一个包装类,并执行has-a关系而不是is-a关系.在你的情况下,这似乎是一个更好的方法.

  • 不是:频道是图像.
  • 相反:频道有一个图像.

像这样:

@interface Channel : NSObject {
@private
   NSString* _name;
   NSString* _description;
   UIImage* _image; 
}
// The rest…
Run Code Online (Sandbox Code Playgroud)

您应该更改名称,description因为它会与之冲突-[NSObject description].