2017-03-07 3 views
0

Ich verwende eine if-Anweisung, um ein Segment auszuführen. Ich habe die if-Anweisung drucken eine Nachricht, wenn es erfolgreich ausgeführt wird. Der Übergang läuft jedoch nicht und ich bin mir nicht sicher warum.Segue läuft nicht

override func viewDidLoad() { 
    super.viewDidLoad() 

    firstField.delegate = self 
    signUpButtonOutlet.isEnabled = false 
    // Do any additional setup after loading the view. 

    let fetchRequest: NSFetchRequest<Check> = Check.fetchRequest() 

    do { 
     //go get the results 
     let searchResults = try getContext().fetch(fetchRequest) 

     //I like to check the size of the returned results! 
     print ("num of results = \(searchResults.count)") 

     //You need to convert to NSManagedObject to use 'for' loops 
     for check in searchResults as [NSManagedObject] { 
      //get the Key Value pairs (although there may be a better way to do that... 
      print("the value was\(check.value(forKey: "isLoggedIn"))") 

      if (check.value(forKey: "isLoggedIn") != nil) { 
       self.performSegue(withIdentifier: "loggedInTrue", sender: self) 
       print("if statement ran") 
      } 


     } 


    } catch { 
     print("Error with request: \(error)") 
    } 

} 
+1

Hat gesetzt haben Sie versucht, Ihre performSegue Code 'viewDidAppear()' zu bewegen ?? –

+0

genau wie @MrugeshTank sagte setzen Sie Ihr Segment in der viewdidappear, Sie können nicht auf Viewdidload segue – rudydydy

+0

Dies ist nicht der beste Weg, dies zu tun, sollten Sie wirklich den eingeloggten Status in Benutzerstandards speichern, wo Sie diese Variable überprüfen können Ihr App-Delegat beim Laden. Dann zeigen Sie den richtigen Controller – Devster101

Antwort

1

Der beste Ansatz hierfür wäre die „LoggedIn“ Controller aus der AppDelegate nach der Überprüfung zu laden, wenn der Benutzer bereits angemeldet ist.

Also für Beispiel in didFinishLaunchingWithOptions-Methode des App-Delegaten überprüfen Sie die Benutzerstandards, um zu sehen, ob der Benutzer, wenn Sie angemeldet sind

Offensichtlich für diese arbeiten Sie die LoggedIn Variable auf true setzen müssen, wenn der Benutzer tatsächlich anmeldet. Wie so

UserDefaults.standard().setBool(true, forKey: "logged_in") 

Eine Sache, die Sie beachten müssen, ist, ändern Sie die YOURSTORYBOARDNAME zu Ihrer eigentlichen Storyboard und Sie werden auch die Kennung des Controllers im Storyboard

enter image description here

1

Shop Login-Status in viewDidLoad und performSegue in viewDidAppear. Dies blendet den ersten ViewController aus, wenn der Anmeldestatus wahr ist.

override func viewWillAppear(_ animated: Bool) { 
    if (isloggedIn != false) { 
     self.view.isHidden = true 
    } else { 
     self.view.isHidden = false 
    } 
} 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(true) 
    if (isloggedIn != false) { 
     self.performSegue(withIdentifier: "loggedInTrue", sender: self) 
    } 
} 

ODER

dispatch_async(dispatch_get_main_queue()) { 
    self.performSegueWithIdentifier("loggedInTrue", sender: self) 
} 
+0

Warum, wenn wir die 'performSegue' in' viewdidload' aufrufen oder –

+0

In 'viewDidLoad'' performSegue' wird nicht aufgerufen. Um es in 'viewDidLoad' aufzurufen, müssen wir es wie' dispatch_async (dispatch_get_main_queue()) { self.performSegueWithIdentifier ("loggedInTrue", sender: self) nennen. } ' –

+0

ha ha ha, schon hast du eine Antwort, dann warum unnötig erhöhen den Speicher –