【问题标题】:When call zbar scanner from a button, the app freezes从按钮调用 zbar 扫描仪时,应用程序冻结
【发布时间】:2016-04-18 20:30:36
【问题描述】:

我有一个带有导航抽屉的应用程序。导航抽屉有一个包含许多单元格的表格。当用户按下表格单元格时,值将存储在单例中,抽屉关闭并出现主屏幕。

当主屏幕加载时,在 viewDidLoad 函数中,代码检查存储在单例中的值,如果有某个值,它会调用 zbar 扫描仪。 但抽屉永远不会关闭它只是挂起。从调试中可以看出,该值已传递给单例,并在 viewDidload 函数中正确访问。

//这是viewDidLoad中的代码。 shareData 是单例,varView 存储在 Navigation 抽屉中选择的表的值。 “零被打印到调试控制台,但随后出现挂起 如果(self.shareData.varView == 0) { 打印(“零”)

        scanWaitingFunction()

    }

此外,当通过主屏幕中的按钮调用 zbar 扫描仪时,它也可以正常工作。我试图从 viewDidLoad 函数中以编程方式调用按钮,但抽屉永远不会关闭并且应用程序会冻结。 @IBAction 函数扫描(发件人:AnyObject) { 扫描等待函数() }

还有 函数 scanWaitingFunction() {

     locked = true
    scanner()         //wait for the async method, the zbar scanner to complete before advancing
    while(locked){wait()}

        }
func wait()
{
    NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate(timeIntervalSinceNow: 1))
}

【问题讨论】:

  • 我忘了说我正在使用 SWRevealViewController 库

标签: navigation freeze drawer zbar


【解决方案1】:

我发现当导航抽屉关闭(swrevealcontroller)时调用视图控制器(zbar扫描仪)时不会出现问题。

当导航抽屉打开时,会发生挂起

【讨论】:

    【解决方案2】:

    通过在导航抽屉关闭和扫描仪视图控制器出现之间添加时间延迟来解决此问题

    let seconds = 2.0
    let delay = seconds * Double(NSEC_PER_SEC)  // nanoseconds per seconds
    let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    
            dispatch_after(dispatchTime, dispatch_get_main_queue(), {
    
                let rvc = self.revealViewController()
                rvc.dismissViewControllerAnimated(false, completion: nil)                
    
            })
      scanWaitingFunction()
    

    【讨论】:

      猜你喜欢
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多