gpt4 book ai didi

ios - 无法从字符串创建 CIFilter 类

转载 作者:行者123 更新时间:2023-11-29 00:35:02 25 4
gpt4 key购买 nike

创建后this question我自己关于无法按名称创建自己的 UIImageView 类我面临着类似的问题,这次是针对 CIFilter 子类,其他问题的公认答案没有解决。

说的就是这个问题。

我正在创建 CIFilter 类的子类,例如 MyEffectFilter1MyEffectFilter1

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

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

当我尝试通过字符串使用这个新命令创建此类时

id newObject = [NSClassFromString(nameOfClass) novo];

然后验证创建的对象,我看到它们的类不是我创建的而是 CIFilter 的。例如:如果我使用我创建的类创建一个 Comic 过滤器:

// 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)。

更改构造函数以执行类似的操作,对 self 调用 alloc。看起来 CIFilter 没有提供任何公共(public) 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

关于ios - 无法从字符串创建 CIFilter 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40821358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com