我正在开发一款iOS应用程序,允许用户将食品条形码扫描到购物清单中。我的目标是当扫描仪拿起条形码时,它会抓取元数据并将其(通过segue)发送到另一个视图,用户可以将该项目记录到他们的购物清单中。我的错误是,当扫描仪拿起条形码并成功返回元数据时,它会调用performSegueWithIdentifier()
(第30行),但实际上并没有进入下一个视图。它将不断扫描条形码并输出我的打印语句,如下所示。父视图是一个带有三个选项卡的TabBarViewController,其中一个是扫描程序。我正在使用可以找到的RSBarcodes
框架here。下面是截图来说明我的错误。
答案 0 :(得分:2)
在呈现其他viewcontroller之前,您应该停止扫描。找到在框架中停止或取消分配扫描程序的已实现方法。
答案 1 :(得分:1)
如Sachin Rocken所述,您需要停止捕获会话以避免多次扫描。只需使用self.session.stopRunning()
即可抓住捕获会话。此外,在ScanItemViewController
内完成的任何UI操作都需要在主线程上完成。您的self.barcodesHandler
应该建模:
self.barcodesHandler = { barcodes in
// print barcode found
self.barcodeVal = barcodes[0].stringValue
self.session.stopRunning() // Stops scanning processs to avoid multiple scans
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.performSegueWithIdentifier("presentAddItem", sender: self)
}) // Any UI operation needs to be done on main thread
}