“该类别不符合键值编码".使用CoreImage [英] "This class is not key value coding-compliant" using CoreImage
问题描述
我正在Swift中开发一个简单的MacOS 命令行应用程序.我创建了一个自定义的CoreImage过滤器,使用起来很麻烦.该代码可以很好地编译,但是在运行时会退出,并显示以下错误:
I'm working on a simple MacOS command-line application in Swift. I created a custom CoreImage filter and having troubles to use it. The code compiles just fine but when it runs it exits with the following error:
***由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]: 此类与键inputImage的键值编码不兼容.'
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key inputImage.'
在此问题上的任何帮助将不胜感激.尝试在SO上寻找答案,但是不幸的是,由于我的应用程序没有使用Storyboards或Outlets(它是纯命令行),所以我无能为力.
Any help with this issue would be greatly appreciated. Tried searching for an answer on SO but since my application does not use Storyboards or Outlets (it's pure command-line) unfortunately I couldn't help myself.
我的程序在这一行中断:
My program breaks on this line:
filter.setValue(inputImage, forKey: kCIInputImageKey)
这是我正在使用的代码:
Here's the code I'm using:
class CustomFilter:CIFilter {
var inputImage:CIImage?
let kernelString = CIKernel(string:
"kernel vec4 chromaKey( __sample s) { \n" +
" vec4 newPixel = s.rgba;" +
" newPixel[0] = 0.0;" +
" newPixel[2] = newPixel[2] / 2.0;" +
" return newPixel;\n" +
"}"
)
override var outputImage:CIImage! {
guard
let inputImage = inputImage
else {
return nil
}
let extent = inputImage.extent
let blur = kernelString?.apply(
withExtent: extent,
roiCallback: {
(index, rect) in
return rect
},
arguments: [inputImage])
return blur!.cropping(to: extent)
}
}
let filter = CustomFilter()
filter.setValue(inputImage, forKey: kCIInputImageKey) // it breaks here
guard
let result = filter.outputImage
else {
return nil
}
return result
推荐答案
键值编码兼容属性必须标记为dynamic
Key value coding-compliant properties must be marked as dynamic
dynamic var inputImage : CIImage?
,在Swift 4中,甚至是@objc
and in Swift 4 even as @objc
@objc dynamic var inputImage : CIImage?
这篇关于“该类别不符合键值编码".使用CoreImage的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!