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
}
}
Instantiating the above filter will cause the app to throw an exception
CoreImage`-[CIFilter _crashed_when_dealloc_called_setValue_nil_forKey_probably_because_the_subclass_already_released_it:]:
Anyone know how to solve this?
Actually problem is: CoreImage tries to set all stored properties of CustomFilter to nil in runtime (I can not explain why). And as inputRadius is non-null - Core Image can not set it nil.
So just use
var inputRadius: NSNumber? // (don't use CGFloat?)
or help framework in runtime by overriding
override func setNilValueForKey(key: String) {}
UPD.
With Swift 3.1 you can use code from the question with 1 small exception: you should correctly override name
property:
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
}
}