2016-04-18 2 views
0

J'ai une application avec un tiroir de navigation. Le tiroir de navigation a une table avec un certain nombre de cellules. Lorsque l'utilisateur appuie sur une cellule de tableau, la valeur est stockée dans un singleton et le tiroir se ferme et l'écran principal apparaît. Lorsque l'écran principal se charge, dans la fonction viewDidLoad, le code vérifie les valeurs stockées dans le singleton et s'il y a une certaine valeur, il appelle un scanner zbar. Mais le tiroir ne se ferme jamais, il se bloque. Je peux voir à partir du débogage que la valeur a été transmise au singleton et accédée correctement dans la fonction viewDidload.Lorsque vous appelez le scanner zbar à partir d'un bouton, l'application se bloque

// Ceci est le code dans viewDidLoad. shareData est le singleton, varView stocke la valeur de la table sélectionnée dans le tiroir de navigation. "Zéro est imprimé à la console de débogage mais il y a un blocage si (self.shareData.varView == 0) { print (" zéro ")

 scanWaitingFunction() 

    } 

également lorsque le scanner zbar est appelé à partir d'un bouton appuyer sur l'écran principal, cela fonctionne correctement.J'ai essayé d'appeler le bouton par programmation de la fonction viewDidLoad mais le tiroir ne se ferme jamais et l'application se fige @IBAction fonc scan (expéditeur: AnyObject) { scanWaitingFunction () }

Également func 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)) 
} 
+0

J'ai oublié de mentionner que J'utilise la bibliothèque SWRevealViewController – MacLiamor

Répondre

0

J'ai trouvé que le problème ne se produit pas lorsqu'un contrôleur de vue (scanner zbar) est appelée lorsque le tiroir de navigation puis est proche (swrevealcontroller).

Lorsque le tiroir de navigation est ouvert, le blocage se produit

0

a résolu le problème en ajoutant un délai entre le moment où le tiroir de navigation est rejeté et le contrôleur de vue du scanner est présenté

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()