无法从字符串

时间:2016-11-26 13:51:54

标签: ios objective-c class cocoa-touch

我正在创建UIImageView类的子类,类似于LittleImageViewRedImageView等。

这些子类具有创建特定图像的便捷方法:

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

当我尝试使用字符串

的新命令创建此类时
id newObject = [NSClassFromString(nameOfClass) novo];

我遇到了#34;无法识别的选择器发送到班级"。显然,objective-c正在尝试执行[UIImageView novo]而不是执行[RedImageView novo]

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我无法准确再现您的体验,但您应该考虑以下几点:(1)将构造函数声明为返回派生类型,(2)将局部变量声明为派生类型,(3) )使用派生类来分配(自我,而非超级)......

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

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

现在,您可以在其他地方使用,而无需在本地变量声明中粗略使用id。看起来像这样,在我的测试中,生成正确类型的实例......

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

NSLog(@"%@, %@", firstTry, secondTry);