"This class is not key value coding-compliant" 使用 CoreImage
"This class is not key value coding-compliant" using CoreImage
我正在 Swift 中开发一个简单的 MacOS 命令行 应用程序。我创建了一个自定义 CoreImage 过滤器,但在使用时遇到了麻烦。代码编译得很好,但在运行时退出并出现以下错误:
*** 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(它是纯命令行),我无法帮助自己。
我的程序在这一行中断:
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
符合键值编码的属性必须标记为dynamic
dynamic var inputImage : CIImage?
并且在 Swift 4 甚至 @objc
@objc dynamic var inputImage : CIImage?
我正在 Swift 中开发一个简单的 MacOS 命令行 应用程序。我创建了一个自定义 CoreImage 过滤器,但在使用时遇到了麻烦。代码编译得很好,但在运行时退出并出现以下错误:
*** 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(它是纯命令行),我无法帮助自己。
我的程序在这一行中断:
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
符合键值编码的属性必须标记为dynamic
dynamic var inputImage : CIImage?
并且在 Swift 4 甚至 @objc
@objc dynamic var inputImage : CIImage?