2017-03-07 6 views
0

저는 segue를 실행하기 위해 if 문을 사용하고 있습니다. if 문이 성공적으로 실행될 때마다 메시지를 출력합니다. 그러나, segue가 실행되지 않고 왜 확실하지 않습니다. viewDidAppear에서 viewDidLoad 및 performSegue에서실행되지 않음

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

에 해당 컨트롤러의 식별자를 설정해야합니다 ?? –

+0

@MrugeshTank와 마찬가지로 viewdidappear에 segue를 넣으십시오. viewdidload에서 segue를 수행 할 수 없습니다. – rudydydy

+0

이것은 가장 좋은 방법은 아니며,이 변수를 확인할 수있는 사용자 기본값에 로그인 상태를 저장해야합니다. 로드시 앱 위임자. 그런 다음 올바른 컨트롤러를 표시하십시오. – Devster101

답변

1

이를위한 가장 좋은 방법은 사용자가 이미 로그인 한 경우 확인 후 AppDelegate에에서 "loggedIn"컨트롤러를로드하는 것입니다. 그래서

에 대한 앱 대리인의 didFinishLaunchingWithOptions 메소드에서 사용자가 로그인했는지 여부를 확인하기 위해 사용자 기본값을 확인하십시오.

이것에 대한 분명한

0은 사용자가 실제로 로그인 할 때 너무

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

하나 개 당신이되고주의 실제 스토리 보드에 YOURSTORYBOARDNAME을 변경해야 할 것은하고있다. true로 loggedIn 변수를 설정해야 작동합니다 당신은 또한 당신이`viewDidAppear()`에 performSegue 코드를 이동하려고 했 스토리 보드

enter image description here

1

스토어 로그인 상태. 로그인 상태가 true이면 첫 번째 ViewController를 숨 깁니다.

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) 
    } 
} 

또는

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

'viewdidload'의'performSegue'를 호출했거나 호출하지 않은 이유는 –

+0

입니다.'viewDidLoad'에서'performSegue'는 호출되지 않습니다. 'viewDidLoad'에서 호출하기 위해서 우리는'dispatch_async (dispatch_get_main_queue()) { self.performSegueWithIdentifier ("loggedInTrue", 보낸 사람 : 자기) }' –

+0

하하하와 같이 그것을 호출해야합니다. 불필요한 메모리 증가 –