2015-05-04 2 views
2

Я пишу приложение Parse и использую Parse LoginViewController и SignUpViewController. Я использовал SubclassConfigViewController в качестве модели из своей демо-версии LoginAndSignUp. Как они говорят в своей документации, я хочу проверить имя пользователя и пароль для разных вещей до начала signUp. Это должно происходить в функции делегата «signUpViewControllerShouldSignBeginSignUp»
Но он не вызывается, и приложение подписывает кого-либо. Он проверяет только, что адрес электронной почты находится в допустимом формате и что имя пользователя существует. Я положил println (Swift) в начале функции. Он никогда не печатает. Что я могу сделать, чтобы заставить эту функцию работать? «loginViewControllerShouldLogInUser» работает как ожидалось.Parse SignUpViewController signUpViewControllerShouldSignBeginSignUp функция делегата не вызывается

Вот мой код:

class LoginConfigViewController: UIViewController, PFLogInViewControllerDelegate, PFSignUpViewControllerDelegate 
{ 

    var loginViewController: LoginViewController! = LoginViewController() 
    var signUpViewController: SignUpViewController! = SignUpViewController() 

    override func viewWillAppear(animated: Bool) 
    { 

     if (PFUser.currentUser() == nil) 
     { 

      loginViewController.delegate = self 
      loginViewController.fields = PFLogInFields.UsernameAndPassword | PFLogInFields.LogInButton | PFLogInFields.SignUpButton | PFLogInFields.DismissButton 

      //signUpViewController.delegate = self; 
      signUpViewController.fields = PFSignUpFields.Default | PFSignUpFields.Additional | PFSignUpFields.DismissButton 
      loginViewController.signUpController = signUpViewController; 
      loginViewController.signUpController?.delegate = self 

      self.presentViewController(self.loginViewController, animated: false, completion: nil) 
     } 
     else 
     { 
      self.dismissViewControllerAnimated(false, completion: nil) 
     } 

    } 

    // MARK: - PFLogInViewControllerDelegate 


    func logInViewController(logInController: PFLogInViewController!, shouldLogInUser user: PFUser!, password: String!) -> Bool { 
     println("shouldLogIn...") 

     return true 
    } 

    func logInViewController(logInController: PFLogInViewController, shouldBeginLogInWithUsername username: String, password: String) -> Bool { 
     println("should login in \(username)") 

     return true 
    } 

    @IBAction func logInViewController(logInController: PFLogInViewController, didLogInUser user: PFUser) { 
     println("didLogInUser \(user.username)") 
     self.loginViewController.dismissViewControllerAnimated(false, completion: nil) 

    } 

    // Sent to the delegate when the log in screen is dismissed. 
    func logInViewControllerDidCancelLogin(logInController: PFLogInViewController!) { 
     println("User dismissed the logInViewController") 
     self.loginViewController.dismissViewControllerAnimated(false, completion: nil) 
    } 



    // MARK: - PFSignUpViewControllerDelegate 

    // Sent to the delegate to determine whether the sign up request should be submitted to the server. 
    func signUpViewControllerShouldBeginSignUp(signUpViewController: PFSignUpViewController!, info: NSDictionary) -> Bool { 
     println("signUpViewController::shouldBeginSignUp") 

     return true 
    } 

    // Sent to the delegate when a PFUser is signed up. 
    func signUpViewController(signUpViewController: PFSignUpViewController, didSignUpUser user: PFUser) { 
     println("didSignUpUser \(user.username)") 
     user.removeObjectForKey("additional") 
     self.signUpViewController.stopAI() 
     self.signUpViewController.dismissViewControllerAnimated(false, completion: nil) 
     self.loginViewController.dismissViewControllerAnimated(false, completion: nil) 


    } 


    // Sent to the delegate when the sign up attempt fails. 
    func signUpViewController(signUpViewController: PFSignUpViewController!, didFailtoSignUpWithError error: NSError) { 
     println("Failed to sign up...") 
    } 

    // Sent to the delegate when the sign up screen is dismissed. 
    func signUpViewControllerDidCancelSignUp(signUpViewController: PFSignUpViewController) { 
     println("User dismissed the signUpViewController") 
     signUpViewController.dismissViewControllerAnimated(false, completion: nil) 
    } 

    //MARK: -() 
    func logOutButtonTapAction(sender: AnyObject) { 
     PFUser.logOut() 
     self.dismissViewControllerAnimated(false, completion: nil) 
    } 

} 

ответ

0

LoginController имеет свойство, которое называется signUpController, который является signupcontroller вызывается LoginController.

Так что, если вы хотите, чтобы проверить, что пользователь сделал (подписавшись или отмену или что-то), вам необходимо установить делегатый signupcontroller в LoginController, вызвав этим:

loginViewController.signUpController?.delegate = self 

Надеется, что это помогает

+0

Спасибо за подсказку. Я установил это сейчас. Я не сомневаюсь, что это нужно. Но функция «shouldBeginSignUp» все еще не вызывается. Спасибо за вашу помощь. – epaus

+0

В дополнение к добавлению: «loginViewController.signUpController? .delegate = self» Я удалил: «signUpViewController.delegate = self» Но это все еще не помогло. shouldBeginSignUp все равно не вызывается. – epaus

+0

@epaus Можете ли вы дать мне свой новый код (отредактируйте ваш вопрос)? На моем испытанном примере это работает – siegy22

0

У меня была одна и та же проблема, по умолчанию логические контроллеры и контроллеры регистрации не будут действовать по назначенным им методам. После нескольких часов и часов съемки проблем и не в состоянии найти ответ, законченный, не используя пользовательский интерфейс синтаксического анализа по умолчанию, а также создав свой собственный, и он отлично работал и хорошо разбирался в синтаксическом анализе. Вот Youtube Video, который показывает вам код, необходимый для пользовательского входа. По тем или иным причинам их методы просто не вызовут и его расстраивают. Как только пользователь вошел в систему, я просто использовал segue для своего Home view Controller.

self.actInd.startAnimating() 
    PFUser.logInWithUsernameInBackground(username, password: password, block: { (user, NSError) -> Void in 

    self.actInd.stopAnimating() 

    if ((user) != nil) { 

     println("success user logged in") 

     self.performSegueWithIdentifier("toHome", sender: self) 
    }else { 

     var alert: UIAlertView = UIAlertView(title: "error", message: "You are logged in already", delegate: self, cancelButtonTitle: "Ok") 
     alert.show() 
    } 

Надеюсь, что это поможет. удачи!

+0

Привет, спасибо. Я уже это делал. Но, глядя на ваш код, я понял, что могу сделать то, что хотел сделать, установив цель для signUpButton. Я хотел подтвердить, что пароль соответствует паролю подтверждения, и я мог бы сделать это в целевом я, установленном для signUpButton.По какой-то причине я чувствовал, что это должно быть сделано в shouldBeginSignUp, что, вероятно, было их намерением. Но, как вы говорите, их методы не вызываются. Спасибо за ваш вклад. Это обнадеживает, чтобы знать, что не только у меня возникает эта проблема, когда эти функции не вызываются. Благодарю. – epaus

+0

Хорошо shucks. Я пытался избежать написания кода для signUp, как и вы, и просто добавить цель к уже существующему signUpButton. Но, оказывается, я не могу контролировать (т. Е. Предотвращать) регистрацию таким образом, поэтому я сделаю то, что вы сделали, и создайте свой собственный signupButton в своем SignUpViewController и добавьте для него действие ... точное определение код регистрации. Как раздражает. Почему функции не могут работать так, как они должны. Еще раз спасибо за вашу помощь. – epaus

0

Я была такая же проблема, попробуйте следующее:

let logInController = LogInViewController() 
let signUpController = SignUpViewController() 
logInController.delegate = self 
signUpController.delegate = self 
logInController.signUpController = signUpController 
Смежные вопросы