CIDetectorTypeQRCode给出错误

时间:2016-11-03 19:07:35

标签: swift cidetector

let detector:CIDetector=CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: [CIDetectorAccuracy:CIDetectorAccuracyHigh])!

它在设备上工作正常,但在为iTunes发行版生成构建时,它会出错:

  

“类型的值'[String:AnyObject]?”没有会员'Key'

如果我删除了选项部分

[CIDetectorAccuracy:CIDetectorAccuracyHigh]

然后它会给出错误:

  

(ofType:String,context:CIContext ?, options:[String:AnyObject]?) - > CIDetector'不能转换为'(ofType:String,context:CIContext ?, options:[String:AnyObject]?) - > CIDetector?“

有人对此有所了解吗?

我使用的是Swift 2.3和Xcode 8.1。

2 个答案:

答案 0 :(得分:3)

我在Swift 3和XCode 8.1中遇到了同样的问题

以下是我的解决方案。将CIDetector(...)更改为CIDetector.init(...)

let detector: CIDetector? = CIDetector.init(ofType:CIDetectorTypeQRCode, context:nil, options:[CIDetectorAccuracy: CIDetectorAccuracyHigh])

答案 1 :(得分:-1)

您好我也有同样的问题。我尝试了很多,但问题没有解决。后来我发现编译器或swift语法创建了创建问题。 所以创建了新的目标c文件,在那里添加了目标代码并且它有效。 所以尝试使用Objective c文件。这真的对我有用。

-(NSString *)getQRCodeStringFromImage:(UIImage *)QRcodeimage {

    NSDictionary *detectorOptions = @{@"CIDetectorAccuracy": @"CIDetectorAccuracyHigh"};
    CIDetector *detector = [CIDetector  detectorOfType:CIDetectorTypeQRCode context:nil options:detectorOptions];
    CIImage *ciImage = [[CIImage alloc] initWithImage:QRcodeimage];

    if (detector)  {

        NSArray* featuresR = [detector featuresInImage:ciImage];
        NSString* decodeR;

        for (CIQRCodeFeature* featureR in featuresR)  {
            decodeR = featureR.messageString;
        }
        NSLog(@"QRCode String : %@" , decodeR);

        return decodeR;
    }
    return  nil;
}