"这个类不符合关键值编码"使用CoreImage

时间:2017-10-04 13:24:08

标签: swift macos core-image

我在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

1 个答案:

答案 0 :(得分:25)

符合键值编码的属性必须标记为dynamic

dynamic var inputImage : CIImage?

和Swift 4中的@objc

@objc dynamic var inputImage : CIImage?