2017-05-03 2 views
1

Hallo, ich versuche eine Push-Benachrichtigungsfunktion in meiner IOS-App zu implementieren. Derzeit habe ich Code, der einen bestimmten Viewcontroller öffnet, wenn die App durch die Push-Benachrichtigung geöffnet wurde. Die Art, wie ich das mache, ist, indem ich den Viewcontroller auf die Oberseite drücke.Wie übermittele ich Daten von Appdelegate zu einem Viewcontroller?

Was ich jetzt tun muss, ist, einige Daten von Appdelegate an den Viewcontroller zu übergeben. Ich verstehe, um Daten von Viewcontroller zu ViewController zu übergeben ist prepareforsegue zu verwenden. Ich habe versucht, dies und es hat nicht funktioniert

Ich habe versucht zu erforschen, wie diese Aufgabe zu tun, aber eine Menge der Antworten auf stackoverflow waren veraltete Swift-Code, den ich nicht die Fähigkeit haben, um schnelle konvertieren 3. kann jemand erklären Wie würde ich Daten von Appdelegate an einen Viewcontroller senden?

heres der Code die VC zu zeigen, die in didFinishLaunchingWithOptions ist

let storyboard = UIStoryboard(name: "Main", bundle: nil) 

let destinationViewController = storyboard.instantiateViewController(withIdentifier: "detailPin2") as! detailPinViewController 

let navigationController = self.window?.rootViewController as! UINavigationController 

navigationController.pushViewController(destinationViewController, animated: false) 
+0

Zeigen Sie den Code, den Sie verwenden, um den VC von AppDelegate * show * anzuzeigen. – DonMag

+0

bearbeitet Post. Code sollte jetzt sein – JackieXY

+0

Fehle ich etwas? Sie befinden sich in einer Funktion in appdelegate und Sie haben einen Zeiger auf Ihre Ziel-VC. Können Sie nicht eine Mitgliedsfunktion Ihres VC mit den Daten, die Sie übergeben wollen, aufrufen? – Spads

Antwort

1

OK - Sie die meiste Arbeit bereits getan haben ...

Wenn segues verwenden, iOS erstellt Ihre View-Controller und gibt Ihnen Zugriff darauf in Vorbereitung, in dem Sie wahrscheinlich so etwas wie dies getan haben:

if let vc = segue.destination as? detailPinViewController { 
    vc.myVariable = "this is the data to pass" 
} 

in didFinishLaunchingWithOptions, Sie sind die Schaffung Teil tun, ein d die „Präsentation“ Teil ... so können Sie fügen Sie einfach im Teil „die Daten übergeben“:

let destinationViewController = storyboard.instantiateViewController(withIdentifier: "detailPin2") as! detailPinViewController 

destinationViewController.myVariable = "this is the data to pass" 

let navigationController = self.window?.rootViewController as! UINavigationController 

navigationController.pushViewController(destinationViewController, animated: false) 

und das sollte es tun.

-1
//Declare you variable somewhere within the app delegate scope 
@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 
    var myVariable: String = "Hello Swift" 


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     // Override point for customization after application launch. 
     return true 
    } 
// some other app delegate’s methods.... 

} 

//In your view controller 
class ViewController: UIViewController { 

    @IBOutlet weak var myLabel: UILabel! 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    let myOtherVariable = appDelegate.myVariable 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     myLabel.text = myOtherVariable 
     var anotherVariable: String = appDelegate.myVariable // etc... 

    } 

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


} 
Verwandte Themen