• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> 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