核心数据如何使用核心数据来保持用户登录?

时间:2015-02-15 01:07:30

标签: ios swift core-data

我正在创建这个名为imagur的应用程序,它有一个注册和登录,每当我离开应用程序时用户已经拥有一个帐户,我希望它自动识别用户我将如何做到这一点这是我到目前为止:

import UIKit

class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {

    var signupActive = true

    var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

    func displayAlert(title:String, error:String) {

        var alert = UIAlertController(title: title, message: error, preferredStyle: UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: { action in

            self.dismissViewControllerAnimated(true, completion: nil)

        }))

        self.presentViewController(alert, animated: true, completion: nil)

    }


    @IBOutlet var username: UITextField!

    @IBOutlet var password: UITextField!


    @IBOutlet var alreadyRegistered: UILabel!

    @IBOutlet var signUpButton: UIButton!

    @IBOutlet var signUpLabel: UILabel!

    @IBOutlet var signUpToggleButton: UIButton!

    @IBAction func toggleSignUp(sender: AnyObject) {

        if signupActive == true {

            signupActive = false

            signUpLabel.text = "Use the form below to log in"

            signUpButton.setTitle("Log In", forState: UIControlState.Normal)

            alreadyRegistered.text = "Not Registered?"

            signUpToggleButton.setTitle("Sign Up", forState: UIControlState.Normal)


        } else {

            signupActive = true

            signUpLabel.text = "Use the form below to sign up"

            signUpButton.setTitle("Sign Up", forState: UIControlState.Normal)

            alreadyRegistered.text = "Already Registered?"

            signUpToggleButton.setTitle("Log In", forState: UIControlState.Normal)


        }


    }

    @IBAction func signUp(sender: AnyObject) {

        var error = ""

        if username.text == "" || password.text == "" {

            error = "Please enter a username and password"

        }


        if error != "" {

            displayAlert("Error In Form", error: error)

        } else {



            activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
            activityIndicator.center = self.view.center
            activityIndicator.hidesWhenStopped = true
            activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
            view.addSubview(activityIndicator)
            activityIndicator.startAnimating()
            UIApplication.sharedApplication().beginIgnoringInteractionEvents()

            if signupActive == true {

                var user = PFUser()
                user.username = username.text
                user.password = password.text

                user.signUpInBackgroundWithBlock {
                    (succeeded: Bool!, signupError: NSError!) -> Void in

                    self.activityIndicator.stopAnimating()
                    UIApplication.sharedApplication().endIgnoringInteractionEvents()

                    if signupError == nil  {
                        // Hooray! Let them use the app now.

                        println("signed up")


                    } else {
                        if let errorString = signupError.userInfo?["error"] as? NSString {

                            error = errorString

                        } else {

                            error = "Please try again later."

                        }

                        self.displayAlert("Could Not Sign Up", error: error)

                    }
                }

            } else {

                PFUser.logInWithUsernameInBackground(username.text, password:password.text) {
                    (user: PFUser!, signupError: NSError!) -> Void in


                    self.activityIndicator.stopAnimating()
                    UIApplication.sharedApplication().endIgnoringInteractionEvents()

                    if signupError == nil {

                        println("logged in")

                    } else {

                        if let errorString = signupError.userInfo?["error"] as? NSString {

                            error = errorString

                        } else {

                            error = "Please try again later."

                        }

                        self.displayAlert("Could Not Log In", error: error)


                    }
                }


            }


        }


    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

    }

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

}

哦,我也在使用Parse。

2 个答案:

答案 0 :(得分:2)

如果你想要做的就是记住用户在应用程序关闭/重新启动时登录,那么你可以使用NSUserDefaults保存这个事实并在启动时检查NSUserDefaults。这是一种非常简单的方法。

使用核心数据只是为了在用户登录时持久存在可能有点过分。

如果您确实需要记住他们的用户名和密码,那么这完全是另一个问题。在此方案中,您应该用户核心数据或NSUserDefaults。要安全地存储用户凭据,您需要在安全框架中使用Keychain Service

答案 1 :(得分:0)

如果您想要做的就是记住用户在应用程序关闭/重新启动时登录,那么您可以使用NSUserDefaults保存该事实并在启动时检查NSUserDefaults。这是一种非常简单的方法。

使用核心数据只是为了在用户登录时持久存在可能有点过分。

如果您确实需要记住他们的用户名和密码,那么这完全是另一个问题。在此方案中,您不应使用Core Data或NSUserDefaults。要安全地存储用户凭据,您需要在安全框架中使用Keychain服务。