web-dev-qa-db-fra.com

Swift: Comment accéder à la variable AppDelegate à partir du contrôleur View?

Je voudrais écrire dans le fichier texte ou csv (préfère) la variable du contrôleur de vue. 

En effet, je suis en train de faire une application de dessin et je voudrais écrire dans le fichier la position actuelle du doigt. 

class ViewController: UIViewController {var lastPoint = CGPoint.zeroPoint ... }

J'aimerais avoir accès à lastPoint.x et lastPoint.y à partir d'AppDelegate. comment je pourrais faire ça? Je vous remercie.

14
Yann Amouyal

Votre question est pleine de confusion mais si c'est ce que vous recherchez:

Vous pouvez accéder à appDelegate en obtenant une référence comme celle-ci:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

après cela, si vous avez stocké une propriété appelée lastPoint dans votre appDelegate, vous pouvez accéder à ses composants très simplement comme ceci:

let x = appDelegate.lastPoint.x
let y = appDelegate.lastPoint.y

Si vous devez accéder à vos propriétés viewController à partir de AppDelegate, je vous conseille alors de faire référence à votre contrôleur de vue dans votre appdelegate:

var myViewController: ViewController!

ensuite, lorsque votre contrôleur de vue est créé, vous pouvez y stocker une référence dans la propriété appdelegate:

Si vous créez votre contrôleur de vue en dehors de votre appDelegate:

Syntaxe Swift 1-2

var theViewController = ViewController()
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.myViewController = theViewController

Syntaxe de Swift 3-4

var theViewController = ViewController()
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.myViewController = theViewController

Si vous créez votre contrôleur de vue à l'intérieur de votre appDelegate:

self.myViewController = ViewController()

Après cela, vous pouvez accéder à vos données depuis votre viewcontroller à partir de votre appdelegate simplement en accédant à sa propriété comme ceci:

let x = self.myViewController.lastPoint.x
let y = self.myViewController.lastPoint.y
29
The Tom

J'ai réussi à accéder à ViewController à partir du délégué de l'application en créant une instance de ViewController dans AppDelegate.Swift, comme suit:

var mainViewController = ViewController()

func applicationWillEnterForeground(_ application: UIApplication) {
    mainViewController.myVariable = "Hello".
}

Néanmoins, je ne comprends pas comment AppDelegate "sait" que mainViewController est censé pointer vers ce ViewController particulier. Comme mon application a une seule vue et un seul ViewController, ça va, mais qu'est-ce que j'ai eu plusieurs ViewControllers associés à différentes vues UIV? Appréciez si quelqu'un ici peut nous éclairer .. Cordialement, .__ Andre

1
Andre Guerra

Mise à jour Swift 3

    var theViewController = ViewController()
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.myViewController = theViewController
1
iLandes

Vous pouvez créer un BaseViewController et écrire ceci 

class BaseViewController {
lazy var appDelegate : AppDelegate {
    return UIApplication.shared.delegate as? AppDelegate
}}

et hériter d'autres viewcontrollers avec BaseViewController et y accéder par 

class ViewController : BaseViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    print(self.appDelegate?.lastPoint.x)
    print(self.appDelegate?.lastPoint.x)
}}
0
Agent Smith