2016-04-18 11 views
0

Ich habe eine App mit einer Navigationsschublade. Die Navigationsschublade hat eine Tabelle mit einer Anzahl von Zellen. Wenn der Benutzer eine Tabellenzelle drückt, wird der Wert in einem Singleton gespeichert und die Schublade wird geschlossen, und der Hauptbildschirm wird angezeigt.Wenn Anruf zbar Scanner von einer Taste, die App einfriert

Wenn der Hauptbildschirm geladen wird, prüft der Code in der viewDidLoad-Funktion die im Singleton gespeicherten Werte und ruft bei einem bestimmten Wert einen Zbar-Scanner auf. Aber die Schublade schließt nie, es hängt einfach. Ich kann vom Debug sehen, dass der Wert an den Singleton übergeben wurde und in der Funktion viewDidload korrekt darauf zugegriffen wurde.

// Dies ist der Code in viewDidLoad. shareData ist der Singleton, varView speichert den Wert der im Navigationsschublade ausgewählten Tabelle. "Null wird auf die Debug-Konsole ausgedruckt, aber dann gibt es einen Hang if (self.shareData.varView == 0) { print (" Null ")

 scanWaitingFunction() 

    } 

Auch wenn der zbar Scanner genannt wird . von einer Taste auf dem Hauptbildschirm, es korrekt funktioniert ich habe versucht, den Knopf programmatisch von der viewDidLoad Funktion zu nennen, aber die Schublade nie geschlossen und die App gefriert @IBAction func Scan. (Sender: ANYOBJECT) { scanWaitingFunction () }

Auch 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

ich vergessen zu erwähnen, dass Ich benutze die SWRevealViewController-Bibliothek – MacLiamor

Antwort

0

habe ich gefunden, dass das Problem nicht auftritt, wenn ein View-Controller (zbar Scanner) aufgerufen wird, wenn dann Navigationsleiste der Nähe ist (swrevealcontroller).

Wenn die Navigationsleiste geöffnet ist, tritt der Hang

0

löste es, indem eine Zeitverzögerung zwischen dem Hinzufügen, wenn die Navigationsleiste des Feldes verwiesen und der Scanner-View-Controller präsentiert

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