2015-06-23 9 views
11

Ich möchte in die Text- oder CSV (Prefer) Datei die Variable vom View-Controller schreiben.Swift: Wie in AppDelegate-Variable vom View-Controller zugreifen?

In der Tat mache ich eine Zeichnung App und ich möchte in der Datei die aktuelle Position des Fingers schreiben.

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

Ich möchte den Zugang zu lastPoint.x und lastPoint.y vom AppDelegate haben. Wie könnte ich das tun? Vielen Dank.

+0

Wo und wie wird Ihr ViewController erstellt? –

Antwort

24

Ihre Frage ist voller Verwirrung aber wenn das, was Sie suchen:

können Sie die AppDelegate zugreifen, indem Sie einen Verweis auf das so bekommen:

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

danach, wenn Sie Haben Sie eine Eigenschaft namens lastPoint in Ihrer App gespeichertDelegate können Sie auf seine Komponenten sehr einfach wie folgt zugreifen:

Wenn Sie Ihre Viewcontroller Eigenschaften vom AppDelegate zugreifen müssen, dann schlage ich einen Verweis auf Ihre View-Controller in Ihrer AppDelegate mit:

var myViewController: ViewController! 

dann, wenn der View-Controller erstellt wird Sie einen Verweis darauf speichern können in der AppDelegate Eigenschaft:

Wenn Ihre Ansicht erstellen Controller außerhalb Ihres AppDelegate:

Swift 1-2 Syntax

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

Swift 3-4 Syntax

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

Wenn Sie Ihren View-Controller innerhalb Ihrer AppDelegate erstellen:

self.myViewController = ViewController() 

Danach können Sie Ihre Daten von Ihrem Viewcontroller von Ihrem AppDelegate zugreifen nur indem man auf seine Eigenschaft wie folgt zugreift:

let x = self.myViewController.lastPoint.x 
let y = self.myViewController.lastPoint.y 
+0

Eigentlich ist es das Gegenteil, das ich brauche. Von appDelegate muss ich Zugriff auf die Variablen lastPoint.x und lastPoint.y haben (im ViewController gefunden) –

+0

Siehe bearbeitete Antwort –

+1

es funktioniert nicht. Es gibt einen Fehler in dieser Zeile: appDelegate.myViewController = theViewController "erwartete Erklärung" Und auch das: let x = self.myViewController.lastPoint.x lassen y = self.myViewController.lastPoint.y –

1

Swift 3 Update

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

Sie eine BaseViewController erstellen und diese

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

schreiben und andere Viewcontrollers mit BaseViewController erben und diese durch Zugriff auf

class ViewController : BaseViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    print(self.appDelegate?.lastPoint.x) 
    print(self.appDelegate?.lastPoint.x) 
}} 
1

ich verwalten habe Greifen Sie über den Anwendungsdelegaten auf den ViewController zu, indem Sie eine Instanz von ViewControl erstellen in AppDelegate.schnell, wie:

var mainViewController = ViewController() 

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

Trotzdem verstehe ich nicht, wie die AppDelegate nicht „wissen“, dass Mainviewcontroller auf die jeweiligen Viewcontroller verweisen sollen. Da meine Anwendung eine einzelne Ansicht und einen einzelnen ViewController hat, ist das in Ordnung, aber was ich hatte mehrere ViewControllers mit verschiedenen UIViews verbunden? Schätzen Sie, wenn hier jemand Licht ins Dunkel bringen kann. Mit freundlichen Grüßen, Andre

+0

Habe gerade herausgefunden, dass AppDelegate nicht auf meine tatsächliche ViewController.swift verweist. Es hat anscheinend eine neue ViewController-Instanz in meinem AppDelegate erstellt, sodass ich immer noch nicht weiß, wie ich auf meine vorhandene VC-Instanz zugreifen kann. Schätzen Sie jede Klärung zu diesem Thema. –

+0

Nur diese Antwort gefunden, was ich hier in SO brauche: https://stackoverflow.com/questions/43831571/swift-ios-how-to-run-function-in-viewcontroller-from-appdelegate –

Verwandte Themen