Inability to create my UIImageView classes from st

2019-09-07 06:26发布

I am creating subclasses of UIImageView class, something like LittleImageView, RedImageView, etc.

These subclasses have this convenience method for the creation of specific images:

+ (UIImageView *)novo {
   UIImageView *newImage = [[super alloc] initWithImage:...
   // do stuff
   return newImage;
 }

When I try to create such classes using this new command by string

id newObject = [NSClassFromString(nameOfClass) novo];

I get a crash with "unrecognized selector sent to class". Apparently objective-c is trying to do a [UIImageView novo] instead of doing a [RedImageView novo], for instance.

Any ideas how to solve this?

1条回答
Deceive 欺骗
2楼-- · 2019-09-07 07:18

I can't reproduce your experience exactly, but there are a few changes you should consider: (1) declare the constructor as returning the derived type, (2) declare the local variable as the derived type, (3) used the derived class to alloc (self, not super)...

// in MyImageView.h
+ (instancetype)myImageView:(UIImage *)image;

// in MyImageView.m
+ (instancetype)myImageView:(UIImage *)image {
    MyImageView *miv = [[self alloc] initWithImage:image];
    // ...
    return miv;
}

Now you can use elsewhere without the sketchy use of id in your local variable declaration. It looks like this, and in my test, generates instances of the correct type...

MyImageView *firstTry = [MyImageView myImageView:nil];
MyImageView *secondTry = [NSClassFromString(@"MyImageView") myImageView:nil];

NSLog(@"%@, %@", firstTry, secondTry);
查看更多
登录 后发表回答