2016-04-12 20 views
0

Ich möchte eine Warnung anzeigen, und ich habe es getan. Aber es gibt ein Problem: Ich kann einen globalen Wert nicht ändern oder eine Funktion im Handler von UIAlertAction von UIAlertController hinzufügen. Zum Beispiel:Wie ändert man den globalen Wert (Funktion hinzufügen) im Handler von UIAlertAction von UIAlertController?

let alertController = UIAlertController(title: "", 
              message: "Do you want to leave ?", preferredStyle: UIAlertControllerStyle.Alert) 
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil) 
let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, 
          handler: { 
           action in 
self.appDelegate.globalvalue = true 

}) 
alertController.addAction(cancelAction) 
alertController.addAction(okAction) 
if let popoverController = alertController.popoverPresentationController { 
    popoverController.sourceView = sender as! UIView 
    popoverController.sourceRect = sender.bounds 
} 
self.presentViewController(alertController, animated: true, completion: nil) 

ich hinzufügen self.appDelegate.globalvalue = true im Handler von UIAlertAction von UIAlertController, aber der Wert self.appDelegate.globalvalue ist immer falsch ... self.appDelegate.globalvalue ist nicht wahr ...

sein geändert Wie kann ich tun, um Ändern Sie den Wert im Handler von UIAlertAction von UIAlertController? oder Kann ich einen globalen Wert ändern, nachdem ich in der Warnung auf OK geklickt habe? Vielen Dank für alle von Ihnen :)

+0

Haben Sie ohne Selbstversuch versucht? und wo ist dieser Code? Appdelegate oder irgendein viewController? – Miknash

+0

er muss 'self' verwenden, da er' appDelegate' von innerhalb einer Schließung referenziert ... –

+0

Ich brauche 'self', ich definiere den Wert in' AppDelegate.swift' – user2262304

Antwort

0

Wie erhalten Sie einen Verweis auf die AppDelegate? der folgende Code sollte funktionieren:

class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 
    var globalValue = false 

} 

class ViewController: UIViewController { 

    var appDelegate: AppDelegate { 
     return UIApplication.sharedApplication().delegate as! AppDelegate 
    } 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     let alert = UIAlertController(title: nil, message: "set global value to true", preferredStyle: .Alert) 
     let action = UIAlertAction(title: "ok", style: .Default) { (action) in 
      self.appDelegate.globalValue = true 
      print("after: \(self.appDelegate.globalValue)") 
     } 
     alert.addAction(action) 

     print("before: \(self.appDelegate.globalValue)") 
     presentViewController(alert, animated: true, completion: nil) 
    } 

} 
+0

Vielen Dank für Ihre Antwort, ich bekomme eine Referenz wie folgt: 'var appDelegate: AppDelegate = UIApplication.sharedApplication(). delegate as! AppDelegate' – user2262304

+0

keine Sorgen. Wie überprüfen Sie, ob Ihre Werte geändert wurden? –

+0

Vielen Dank für Ihren Code, es funktioniert, aber es funktioniert gestern nicht, und tatsächlich definiere ich einen globalen Wert von einem SDK, wie folgt: 'var globalSDK: Video?' Aber ich kann nicht die Funktion der Klasse 'Video verwenden '. In dieser Klasse gibt es eine Funktion, um zu erhalten, wie viele Leute dieses Video benutzen, ich kann diese Funktion nicht im Handler von 'UIAlertAction' verwenden.' GlobalSDK' ist ein globaler Wert, weshalb ich es nicht im Handler verwenden kann von 'UIAlertAction'? Ich teste diese Funktion aus dem Handler und es funktioniert, können Sie mir ein paar Hilfen geben? Danke – user2262304