【问题标题】:Swift : No Matter what I do CIDetector is always nil斯威夫特:不管我做什么 CIDetector 总是零
【发布时间】:2015-05-12 11:45:19
【问题描述】:

我不明白为什么这段代码不起作用,检测器始终为零,CIDetectorTypeQRCode 常量,一切都适用于 CIDetectorTypeFace。 我怀疑来自 Apple API 的错误。这是官方文档:Apple documentation

@IBAction func analyseTag(sender: AnyObject) {

        var detector:CIDetector = CIDetector(ofType: CIDetectorTypeQRCode, context:nil, options:[CIDetectorAccuracy: CIDetectorAccuracyHigh])
        var decode = ""
        var ciImage:CIImage = CIImage(image: ImgChoosed.image)
        var message:String = "";

        let features = detector.featuresInImage(ciImage)
        for feature in features as [CIQRCodeFeature] {
            message += feature.messageString
        }

        if(message == "") {
            println("nothing")

        } else {
            println("\(message)")
        }



    }

你有解决办法吗? 先谢谢大佬的

【问题讨论】:

    标签: ios swift qr-code


    【解决方案1】:

    这也发生在我们身上。 iPhone 4s 不返回 QRCode 类型的 CIDetector。其他类型(矩形、脸)虽然有效……

    相同的代码在 iPhone 6 上按预期工作。尚未在 5 或 5s 上进行测试。

    但我相信,两周前它还在 4s 上工作。我猜当时它还在 iOS 8 上。

    【讨论】:

    • 在 iPhone 5 上测试过,但没有用。但在 iPad Air 2 上工作。两者都运行 iOS 9。
    【解决方案2】:

    您提供的代码不能有 nil detector,因为它不是可选的,如果是,编译器会抱怨代码中的多个位置。

    如果 features 为空,那么您就知道它没有在您的图像中找到 QR 码。尝试提供更好的图像或拒绝CIDetectorAccuracy

    如果 features 不为空,则您的演员表失败。

    编辑: 您不能在构造函数中传递 nil 上下文。

    【讨论】:

    • 我知道 nil 检测器不能为 nil,但是当我这样声明它时就是这样。 XCode 告诉我:“致命错误:在展开可选值时意外发现 nil”在检测器字段的行。我试图将 CIDetectorAccuracy 调低,但这是一样的。当我为 CIDectectorTypeFace 切换“ofType:CIDetectorTypeQRCode”时,一切都会编译。
    • @Tumeconnais 该错误是因为您无法传递 nil 上下文。
    • 所以我把 context:CIContext(options: nil) 和相同。我不明白:(
    • @Tumeconnais 如果UIKit 中的参数被强制解包(以!结尾),那么你不能传递零。在这种情况下,选项也是如此。
    • context:CIContext(options:[kCIContextPriorityRequestLow: true]) 两者都没有,如果我按照本教程link 我可以将 nil 放在上下文中。但我不明白的是:如果我把 CIDetector(ofType: CIDetectorTypeFace, context:nil, options:[CIDetectorAccuracy: CIDetectorAccuracyHigh]) 一切工作正常,没有错误发生。
    【解决方案3】:
    1. 确保您的 ImgChoosed.image 不为零。
    2. 更改另一个输入图像以进行测试。
    3. 试试for feature in features as! [CIQRCodeFeature]

    【讨论】:

      【解决方案4】:

      我发现在设备上使用解决了这个问题。模拟器似乎总是为我返回 nil。

      【讨论】:

        猜你喜欢
        • 2013-10-04
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 2017-03-24
        • 1970-01-01
        • 1970-01-01
        • 2016-09-19
        • 1970-01-01
        相关资源
        最近更新 更多