Swift:故事板TabViewController Segue未被触发

时间:2015-05-16 06:41:37

标签: ios swift uitabbarcontroller barcode-scanner rsbarcodes

我正在开发一款iOS应用程序,允许用户将食品条形码扫描到购物清单中。我的目标是当扫描仪拿起条形码时,它会抓取元数据并将其(通过segue)发送到另一个视图,用户可以将该项目记录到他们的购物清单中。我的错误是,当扫描仪拿起条形码并成功返回元数据时,它会调用performSegueWithIdentifier()(第30行),但实际上并没有进入下一个视图。它将不断扫描条形码并输出我的打印语句,如下所示。父视图是一个带有三个选项卡的TabBarViewController,其中一个是扫描程序。我正在使用可以找到的RSBarcodes框架here。下面是截图来说明我的错误。

条码扫描器类

Barcode Scanner Class

终端输出

enter image description here

故事板Segue

enter image description here

模拟器视图

enter image description here

2 个答案:

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