我在Swift中使用简单的MacOS 命令行应用程序。我创建了一个自定义CoreImage过滤器,并且使用它有麻烦。代码编译得很好但是当它运行时它会退出并出现以下错误:
***由于未捕获的异常终止应用' NSUnknownKeyException',原因:' [setValue:forUndefinedKey:]: 这个类不是键输入图像的键值编码兼容。'
对此问题的任何帮助将不胜感激。尝试在SO上搜索答案,但由于我的应用程序不使用Storyboard或Outlets(它是纯粹的命令行),遗憾的是我无法帮助自己。
我的节目在这一行打破了:
filter.setValue(inputImage, forKey: kCIInputImageKey)
以下是我使用的代码:
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
答案 0 :(得分:25)
符合键值编码的属性必须标记为dynamic
dynamic var inputImage : CIImage?
和Swift 4中的@objc
@objc dynamic var inputImage : CIImage?