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

问题描述:

在创建this question之后,我自己无法按名称创建自己的UIImageView类我正面临类似的问题,这次针对CIFilter子类不能由另一个问题上的接受答案解决。无法从字符串创建我的CIFilter类

说的是,这是问题所在。

我创建CIFilter类,像MyEffectFilter1MyEffectFilter1等子类

这些亚类对创建特定图像的这种便捷的方法:

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

当我尝试创建这样的按字符串使用此新命令的类

id newObject = [NSClassFromString(nameOfClass) novo]; 

并验证创建的ob我发现他们的课程不是我创造的,而是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

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

在这种情况下,子类构造函数试图调用继承类的便利构造函数(与上一个调用继承的init的问题相反)。

改变你的构造函数做类似的事情,调用自我的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]; 

在LLDB,这些检查如下...

enter image description here

+0

我想这个问题是solved.THANKS AGA在! – SpaceDog