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。
答案 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;
}