CIDetectorTypeQRCode выдает ошибку

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

Он отлично работает на устройстве, но при создании сборки для дистрибутива iTunes выдает ошибку:

"Значение типа '[String:AnyObject]?" не имеет члена «Ключ»

Если я удалю часть опции

[CIDetectorAccuracy:CIDetectorAccuracyHigh]

то выдает ошибку вида:

(ofType: String, context: CIContext?, options: [String: AnyObject]?) -> CIDetector' не преобразуется в '(ofType: String, context: CIContext?, options: [String: AnyObject]?) -> CIDetector ?

Кто-нибудь имеет представление об этом?

Я использую Swift 2.3 и Xcode 8.1.


person Jitendra Prajapati    schedule 03.11.2016    source источник


Ответы (2)


У меня такая же проблема в Swift 3 и XCode 8.1.

Ниже мое решение. Измените CIDetector(...) на CIDetector.init(...)

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

person Key HeHa    schedule 07.11.2016

Привет у меня тоже такая же проблема. Я много пробовал, но проблема не решалась. Позже я обнаружил, что компилятор или быстрый синтаксис создают проблему. Итак, создал новые объективные файлы 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;
}
person Jitendra Prajapati    schedule 18.11.2016