2016-12-15 1 views
0

J'ai configuré l'analyse & tous, l'inscription fonctionne parfaitement au besoin. Mais après cela, je suis incapable de récupérer les détails de l'utilisateur sur l'appareil pour une utilisation hors ligne.Sauvegarde des détails a/c de l'utilisateur à partir de l'analyse de l'appareil pour une utilisation hors ligne. Swift 3

J'ai besoin de ces objets hors ligne une fois que l'utilisateur se connecte/se connecte.

Nom de la classe: User

Objets:

  1. coverPhoto: Image.png (enregistré en tant que fichier)

  2. profilePicture: Image.png (enregistré en tant que F ile)

  3. usersUsername: String

  4. username/email: String

  5. firstName: String

  6. middleName: String

  7. lastName: String

  8. mobileNumber: String

  9. birthDate: String

  10. gender: String

  11. about: String

J'ai essayé de le stocker en utilisant UserDefaults.standard.set(_variable name_, forKey: "String") mais ne fonctionne pas. : \

C'est ce que je reçois à plusieurs reprises. 1]

C'est ce que je l'ai écrit:

@IBAction func loginButtonPressed(_ sender: AnyObject) { 

    activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 50, height: 50)) 
    activityIndicator.center = self.view.center 
    activityIndicator.hidesWhenStopped = true 
    activityIndicator.activityIndicatorViewStyle = .gray 
    activityIndicator.layer.zPosition = 1 
    view.addSubview(activityIndicator) 
    activityIndicator.startAnimating() 
    UIApplication.shared.beginIgnoringInteractionEvents() 

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

     createAlert(title: "Error", message: "Please enter your username & password!") 

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

    } else { 

     PFUser.logInWithUsername(inBackground: email.text!, password: password.text!, block: { (suser, error) in 



      if error != nil { 

       var displayErrorMessage = "Some Error Occured! Please Try Again Later!" 

       if let errorMessage = error as? NSError { 
        displayErrorMessage = errorMessage.userInfo["error"] as! String 
       } 
       self.createAlert(title: "Dang it!", message: displayErrorMessage) 

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

      } else { 

       self.performSegue(withIdentifier: "toMainFunction", sender: nil) 

       let query = PFUser.query() 

       query?.findObjectsInBackground(block: { (objects, error) in 

        if error != nil { 

         print(error) 

        } else if let users = objects { 

         for object in users { 

          if let user = object as? PFUser { 

           if user.objectId != PFUser.current()?.objectId { 

            if let email = user.username { 
             UserDefaults.standard.set(email, forKey: "email") 
            } 

            if let coverFile = user["coverPhoto"] { 
             UserDefaults.standard.set(coverFile, forKey: "coverPhoto") 
            } 

            if let profileFile = user["profilePicture"] { 
             UserDefaults.standard.set(profileFile, forKey: "profilePicture") 
            } 

            if let firstName = user["firstName"] { 
             UserDefaults.standard.set(firstName, forKey: "firstName") 
            } 

            if let middleName = user["middleName"] { 
             UserDefaults.standard.set(middleName, forKey: "middleName") 
            } 

            if let lastName = user["lastName"] { 
             UserDefaults.standard.set(lastName, forKey: "lastName") 
            } 

            if let mobileNumber = user["mobileNumber"] { 
             UserDefaults.standard.set(mobileNumber, forKey: "mobileNumber") 
            } 

            if let birthday = user["BirthDate"] { 
             UserDefaults.standard.set(birthday, forKey: "BirthDate") 
            } 

            if let gender = user["gender"] { 
             UserDefaults.standard.set(gender, forKey: "gender") 
            } 

            if let aboutYou = user["about"] { 
             UserDefaults.standard.set(aboutYou, forKey: "about") 
            } 

            if let username = user["usersUsername"] { 
             UserDefaults.standard.set(username, forKey: "username") 
            } 

            gloFirstName = UserDefaults.standard.object(forKey: "firstName") as! String 
            gloMiddleName = UserDefaults.standard.object(forKey: "middleName") as! String 
            gloLastName = UserDefaults.standard.object(forKey: "lastName") as! String 
            gloMobNumber = UserDefaults.standard.object(forKey: "mobileNumber") as! String 
            gloEmail = UserDefaults.standard.object(forKey: "email") as! String 
            gloUName = UserDefaults.standard.object(forKey: "username") as! String 
            gloBirthDate = UserDefaults.standard.object(forKey: "BirthDate") as! String 
            gloGenderStr = UserDefaults.standard.object(forKey: "gender") as! String 
            gloAbout = UserDefaults.standard.object(forKey: "about") as! String 

            if let coverImageData = UserDefaults.standard.object(forKey: "coverPhoto"), 
             let coverPhoto = UIImage(data: coverImageData as! Data){ 

             gloCoverImage = coverPhoto 

            } 


            if let profileImageData = UserDefaults.standard.object(forKey: "profilePicture"), 
             let profilePicture = UIImage(data: profileImageData as! Data){ 
             gloProfilePicture = profilePicture 

            } 


           } 

          } 

         } 

        } 

       }) 

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

      } 

     }) 

    } 

} 

Je suis dans une impasse ici.

EDIT:

BreakPoint

EDIT # 2:

enter image description here enter image description here enter image description here

Highlighted code:

let query = PFUser.query() 

       query?.findObjectsInBackground(block: { (objects, error) in 

        if error != nil { 

         print(error) 

        } else if let users = objects { 

         for object in users { 

          if let user = object as? PFUser { 
           //-------------------------------------------------------------------------------------// 
           if user.objectId != PFUser.current()?.objectId { 

            if let email = user.username { 
             UserDefaults.standard.set(email, forKey: "email") 
            } 

            if let coverFile = user["coverPhoto"] { 
             UserDefaults.standard.set(coverFile, forKey: "coverPhoto") 
            } 

            if let profileFile = user["profilePicture"] { 
             UserDefaults.standard.set(profileFile, forKey: "profilePicture") 
            } 

            if let firstName = user["firstName"] { 
             UserDefaults.standard.set(firstName, forKey: "firstName") 
            } 

            if let middleName = user["middleName"] { 
             UserDefaults.standard.set(middleName, forKey: "middleName") 
            } 

            if let lastName = user["lastName"] { 
             UserDefaults.standard.set(lastName, forKey: "lastName") 
            } 

            if let mobileNumber = user["mobileNumber"] { 
             UserDefaults.standard.set(mobileNumber, forKey: "mobileNumber") 
            } 

            if let birthday = user["BirthDate"] { 
             UserDefaults.standard.set(birthday, forKey: "BirthDate") 
            } 

            if let gender = user["gender"] { 
             UserDefaults.standard.set(gender, forKey: "gender") 
            } 

            if let aboutYou = user["about"] { 
             UserDefaults.standard.set(aboutYou, forKey: "about") 
            } 

            if let username = user["usersUsername"] { 
             UserDefaults.standard.set(username, forKey: "username") 
            } 

            gloFirstName = UserDefaults.standard.object(forKey: "firstName") as! String 
            gloMiddleName = UserDefaults.standard.object(forKey: "middleName") as! String 
            gloLastName = UserDefaults.standard.object(forKey: "lastName") as! String 
            gloMobNumber = UserDefaults.standard.object(forKey: "mobileNumber") as! String 
            gloEmail = UserDefaults.standard.object(forKey: "email") as! String 
            gloUName = UserDefaults.standard.object(forKey: "username") as! String 
            gloBirthDate = UserDefaults.standard.object(forKey: "BirthDate") as! String 
            gloGenderStr = UserDefaults.standard.object(forKey: "gender") as! String 
            gloAbout = UserDefaults.standard.object(forKey: "about") as! String 

            if let coverImageData = UserDefaults.standard.object(forKey: "coverPhoto"), 
             let coverPhoto = UIImage(data: coverImageData as! Data){ 

             gloCoverImage = coverPhoto 

            } 


            if let profileImageData = UserDefaults.standard.object(forKey: "profilePicture"), 
             let profilePicture = UIImage(data: profileImageData as! Data){ 
             gloProfilePicture = profilePicture 

            } 


           }//-----------------------------------------------------------------------------// 

          } 

         } 

        } 

       }) 
+0

Le problème est que l'application se bloque parce qu'elle a trouvé de manière inattendue nil tout en déballant une valeur optionnelle, correct? Pouvez-vous poster la ligne où cet accident se produit? – nathan

+0

@nathan Je ne suis pas vraiment sûr si c'est ce dont vous avez besoin -! [Link] (https://i.stack.imgur.com/ofioG.png). Si ce n'est pas le cas, guidez-moi. –

+0

Dans le navigateur de débogage Xcode, vous devriez être en mesure de déterminer quelle ligne du code _your_ provoque le problème. – nathan

Répondre

0

Nevermind a résolu. Cette

if user.objectId != PFUser.current()?.objectId {

aurait dû être cela,

if user.objectId == PFUser.current()?.objectId {

depuis que je avais besoin de mon actuellement connecté détails du compte à apparaître. Les images ne peuvent pas être enregistrées dans UserDefaults. Il suffit donc de le charger dans chaque fois que vous ouvrez l'application et le stocker dans un var myVariableName = UIImage() ainsi que quelques if contrôles de déclaration, vous pouvez forcer le déballer à ceci: var myVariableName = UIImage()!

Merci quand même!