Я создаю приложение, которое использует сканирование QR-кода с использованием RSBarcodes for Swift. То, что я пытаюсь сделать в своем ScanViewController
, - это отсканировать QR-код, проверить, что было отсканировано, а затем отсканировать отсканированные данные. В настоящее время, когда QR-код обнаружен, мой замерзает UI, и вскоре после того, как я получаю ошибки и памяти дамп:Выполнение действия при сканировании штрих-кода с использованием RSBarcodes
«NSInternalInconsistencyException», причина: «Только бежать на главном потоке!».
Возможно, вы не можете быть здесь, чтобы проверить QR-код или не подходящее место для отдыха, но если нет, то мне интересно, где должна проходить валидация и segue. Мое единственное другое требование состоит в том, что проверка выполняется только тогда, когда обнаружен QR-код.
class ScanViewController: RSCodeReaderViewController{
// Class Variables
var finalObject: IBuiltCode?
let ObjectHelper = ObjectBuilder() // Service to validate and build valid scanned objects
override func viewDidLoad() {
super.viewDidLoad()
self.focusMarkLayer.strokeColor = UIColor.redColor().CGColor
self.cornersLayer.strokeColor = UIColor.yellowColor().CGColor
self.tapHandler = { point in
println(point)
}
self.barcodesHandler = { barcodes in
for barcode in barcodes {
println("Barcode found: type=" + barcode.type + " value=" + barcode.stringValue)
if let builtObject = self.ObjectHelper.validateAndBuild(barcode,
scannedData: barcode.stringValue){
println("Good object.")
self.performQR()
}
}
}
}
func performQR(){
performSegueWithIdentifier("toQR", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "toQR"){
let QRVC: QRViewController = segue.destinationViewController as! QRViewController
QRVC.receivedObject = finalObject as? QRObject
}
}
}