class CustomFilter : CIFilter {
var inputImage: CIImage?
var inputRadius: CGFloat = 100.0
override var name: String {
return "CustomFilter"
}
override func setDefaults() {
self.inputRadius = 100.0
}
override var outputImage: CIImage? {
return nil
}
}
实例化上面的过滤器会导致app抛出异常
CoreImage`-[CIFilter _crashed_when_dealloc_called_setValue_nil_forKey_probably_because_the_subclass_already_released_it:]:
有人知道怎么解决吗?
最佳答案
实际上问题是:CoreImage 试图在运行时将 CustomFilter 的所有存储属性设置为 nil(我无法解释原因)。并且由于 inputRadius 是非空的——Core Image 不能将它设置为 nil。
所以就用
var inputRadius: NSNumber? // (don't use CGFloat?)
或通过覆盖在运行时帮助框架
override func setNilValueForKey(key: String) {}
UPD。
使用 Swift 3.1,您可以使用问题中的代码,但有 1 个小异常(exception):您应该正确覆盖 name
属性:
class CustomFilter : CIFilter {
var inputImage: CIImage?
var inputRadius: CGFloat = 100.0
override var name: String {
get { return "CustomFilter" }
set { }
}
override func setDefaults() {
super.setDefaults()
self.inputRadius = 100.0
}
override var outputImage: CIImage? {
return nil
}
}
关于swift - 使用输入参数崩溃在 Swift 中子类化 CIFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35423276/