我遇到了VNDetectBarcodesRequest在iOS 16上的问题。我的代码在iOS 15上工作,但在iOS 16上却没有在图像中找到任何条形码。
我已经将我的代码分离到一个操场上,并在这里经历了同样的问题。在Xcode 13.4.1的操场上运行下面的代码,我得到了结果:
谷歌链接:可选(“https://www.google.com"”)
在Xcode 14上运行相同的代码,我将得到一个nil结果。在带有Xcode 14的iOS15模拟器中运行这个程序会产生积极的结果,只有在iOS16和操场上,它才不会读取QR代码。
要添加它,也不引发任何异常。
有没有人经历过同样的情况,并设法解决了这个问题?
这是我的操场代码:
import UIKit
import Vision
extension UIImage {
func qrCodeLink(completion: @escaping (String?) -> Void) {
guard let ciImage = CIImage(image: self) else {
completion(nil)
return
}
let imageRequestHandler = VNImageRequestHandler(ciImage: ciImage,
orientation: .up,
options: [:])
let request = VNDetectBarcodesRequest { (request,error) in
guard error == nil else {
completion(nil)
return
}
guard let observations = request.results as? [VNDetectedObjectObservation] else {
completion(nil)
return
}
let result = (observations.first as? VNBarcodeObservation)?.payloadStringValue
completion(result)
}
try? imageRequestHandler.perform([request])
}
}
if let google = UIImage(named: "google") {
google.qrCodeLink { link in
debugPrint("Google link: \(link)")
}
} else {
debugPrint("No google image")
}在上面的代码中,我使用了这个图像,它仅仅是一个指向https://www.google.com的链接:

发布于 2022-09-19 16:59:58
在阐述@Peelen的解决方案时,为了确保解决方案只在需要的地方使用(Xcode 14 + iOS 16 +模拟器),我们使用了:
#if targetEnvironment(simulator) && compiler(>=5.7)
if #available(iOS 16, *) {
request.revision = VNDetectBarcodesRequestRevision1
}
#endif发布于 2022-09-19 08:53:24
我想我已经找到问题了。当在Xcode 14和iOS 16上运行请求时,请求修订版在VNDetectBarcodesRequestRevision3上运行(issn尚未在VNDetectBarcodesRequest页面上记录)。但是,使用VNDetectBarcodesRequestRevision1或VNDetectBarcodesRequestRevision2是可行的。
在执行任务对我起作用之前添加以下内容:
request.revision = VNDetectBarcodesRequestRevision1https://stackoverflow.com/questions/73770477
复制相似问题