首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microblink:扫描后获取值

Microblink:扫描后获取值
EN

Stack Overflow用户
提问于 2021-03-11 00:51:19
回答 1查看 64关注 0票数 3

我已经将Microblink读卡器设置为只读一面,并且不允许用户编辑扫描结果:

代码语言:javascript
复制
func didTapScan() {
        /** Create BlinkCard recognizer */
        blinkCardRecognizer = MBCBlinkCardRecognizer()
        blinkCardRecognizer?.extractCvv = false
        blinkCardRecognizer?.extractIban = false
        blinkCardRecognizer?.extractExpiryDate = false
        
        /** Create BlinkCard settings */
        let settings : MBCBlinkCardOverlaySettings = MBCBlinkCardOverlaySettings()
        settings.enableEditScreen = false
        
        /** Crate recognizer collection */
        let recognizerList = [blinkCardRecognizer!]
        let recognizerCollection : MBCRecognizerCollection = MBCRecognizerCollection(recognizers: recognizerList)
        
        /** Create your overlay view controller */
        let blinkCardOverlayViewController = MBCBlinkCardOverlayViewController(settings: settings, recognizerCollection: recognizerCollection, delegate: self)
        
        /** Create recognizer view controller with wanted overlay view controller */
        // NOTE that I put a bang on the end of this - not good
        let recognizerRunneViewController : UIViewController = MBCViewControllerFactory.recognizerRunnerViewController(withOverlayViewController: blinkCardOverlayViewController)!
        
        /** Present the recognizer runner view controller. You can use other presentation methods as well (instead of presentViewController) */
        self.present(recognizerRunneViewController, animated: true, completion: nil)
    }

扫描后,我在委托回调中检查有效状态,然后尝试从cardRecognizer中检索值,但除了崩溃之外什么也得不到:

代码语言:javascript
复制
func blinkCardOverlayViewControllerDidFinishScanning(_ blinkCardOverlayViewController: MBCBlinkCardOverlayViewController, state: MBCRecognizerResultState) {
        // this is done on background thread
        // check for valid state
        if state == .valid {
            
            CRASHES HERE
            guard let result = blinkCardRecognizer?.combinedResult else {
                return
            }
            // CRASHES HERE
            print (result)
            
            // first, pause scanning until we process all the results
            blinkCardOverlayViewController.recognizerRunnerViewController?.pauseScanning()
            
            DispatchQueue.main.async(execute: {() -> Void in
                print(self.blinkCardRecognizer)
                // self.dismiss(animated: true, completion: nil)
            })
        }
    }

这里我漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-11 18:11:32

关于第一段代码,您已经正确地完成了所有工作。

关于第二部分(在blinkCardOverlayViewControllerDidFinishScanning方法中),.combinedResultresult对象的父对象,因此您可以改用blinkCardRecognizer.result

此外,识别器的描述方法(blinkCardRecognizer.result)似乎有问题,因此需要指定要提取的信息。

示例代码如下:

代码语言:javascript
复制
extension ViewController: MBCBlinkCardOverlayViewControllerDelegate {
    func blinkCardOverlayViewControllerDidFinishScanning(_ blinkCardOverlayViewController: MBCBlinkCardOverlayViewController, state: MBCRecognizerResultState) {
        /** This is done on background thread */
        
        if state == .valid {

            guard let result = blinkCardRecognizer?.result else {
                  return
              }
            blinkCardOverlayViewController.recognizerRunnerViewController?.pauseScanning()

              DispatchQueue.main.async(execute: {() -> Void in
                print(result.cardNumber)
              })
          }
      }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66569317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档