无法从字符串创建我的CIFilter类
问题描述:
在创建this question之后,我自己无法按名称创建自己的UIImageView类我正面临类似的问题,这次针对CIFilter子类不能由另一个问题上的接受答案解决。无法从字符串创建我的CIFilter类
说的是,这是问题所在。
我创建CIFilter
类,像MyEffectFilter1
,MyEffectFilter1
等子类
这些亚类对创建特定图像的这种便捷的方法:
+ (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,这些检查如下...
我想这个问题是solved.THANKS AGA在! – SpaceDog