• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

Lable aktualisiert sich nicht

belinea

deaktivierter Benutzer
Registriert
12.07.08
Beiträge
351
Kann mir jemand sagen warum sich das Label von "Waiting..." nicht in "Ok" ändert wenn TouchID erfolgreich war. Die Meldung "TouchID erfolgreich" erscheint in der Konsole.

Muss man eine View aktualisieren nachdem man sie mit labe.text ="Blaa" verändert hat?


Code:
import UIKit
import LocalAuthentication

class ViewController: UIViewController {
    @IBOutlet weak var labelTouchIDFeedback: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        labelTouchIDFeedback.text = "waiting..."
        startTouchID()
    }
   

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func startTouchID()  {
        var context = LAContext()

        if context.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: nil) {
            context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "Bitte legen Sie den Finger auf den Scanner") {
                success, error in

                if success {
                    print("TouchID erfolgreich")
                    self.labelTouchIDFeedback.text = "success"
                } else {
                    print("Fehler")
                }
            }
            print("biometrics available")
        }
    }



}
 
Erfolgt der Callback auf der MainQueue? Falls nicht, musst du vor UI-Änderungen zunächst dorthin wechseln:

Code:
NSOperationQueue.mainQueue().addOperationWithBlock { () -> Void in
      self.labelTouchIDFeedback.text = "success"
}

Gruß Felix
 
  • Like
Reaktionen: belinea
Tausend Dank.

Hat man da überhaupt eine Chance ohne Experten selber auf die Problemlösung zu kommen? Oder ist das jetzt eine Sache von simplen Grundlagen die man eigentlich beherrschen sollte?
 
UI Änderungen nur auf dem Main-Thread merkt man sich spätestens nach solchen Problemen :) In die Dokumentation gucken sollte aber eine Sache der Gewohnheit sein, wenn es mal nicht weitergeht…
 
  • Like
Reaktionen: belinea
Dass UI-Änderungen nur auf dem Main-Thread erfolgen dürfen, sollte eigentlich in jedem guten iOS-Buch/Tutorial/Video irgendwann mal erwähnt werden. Dass du bei einem Callback nicht auf dem Main-Thread bist, siehst du zur Not auch im Debugger, wenn du an der entsprechenden Stelle einen Breakpoint setzt:

Debugger_Threads.png

Gruß Felix
 
  • Like
Reaktionen: belinea