无法从字符串创建我的CIFilter类

时间:2016-11-26 17:57:58

标签: ios objective-c class cocoa-touch

自己创建this question后,我无法按名称创建自己的UIImageView类,我遇到了类似的问题,这次是CIFilter子类,但是在另一个问题上没有被接受的答案解决。

说,这是问题所在。

我正在创建CIFilter类的子类,类似于MyEffectFilter1MyEffectFilter1等。

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

+ (instancetype)novo {
   MyEffectFilter1 * newFilter = [self filterWithName:...
   // do stuff
   return newFilter;
 }

当我尝试使用字符串

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

验证创建的对象,我发现他们的类不是我创建的类,而是CIFilter类。例如:如果我使用我创建的类创建一个漫画过滤器:

// initialization code on MyComicClass.m
+ (instancetype)novo {
   MyComicClass * newFilter = [self filterWithName:@"CIComicEffect"];
   // do stuff
   return newFilter;
 }

通过

id newObject = [NSClassFromString(@"MyComicClass") novo];

并执行po newObject来控制,或使用

测试该类
Class class = [newObject class];

我的课程等于CIComicEffect而不是MyComicClass

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

1 个答案:

答案 0 :(得分:1)

在这种情况下,子类构造函数试图调用继承类的便捷构造函数(与之前的问题相反,后者调用了继承的init)。

更改构造函数以执行类似的操作,在self上调用alloc。 CIFilter提供任何公共initWith...方法看起来都不像name这样的属性,可以通过直接调用新实例来轻松设置// MyEffectFilter1.m + (instancetype)novo { MyEffectFilter1 *newFilter = [[self alloc] init]; newFilter.name = @"name"; return newFilter; } 等属性...

MyEffectFilter1 *filterA = [MyEffectFilter1 novo];
MyEffectFilter1 *filterB = [NSClassFromString(@"MyEffectFilter1") novo];

我测试了以下代码......

{{1}}

在lldb中,这些检查如下......

enter image description here