Akshay Kheveria
Akshay Kheveria

Reputation: 64

Retrieving user data from Parse "_User" class using "ObjectId"

i am trying to retrive a user's data to get the user info from the _User class using the object id. i used this :

var data:NSMutableArray = NSMutableArray()
func loadData() {
    data.removeAllObjects()

    var profileQuery:PFQuery = PFUser.query()!
        profileQuery.getObjectInBackgroundWithId(userId, block: { (objects, error) -> Void in
            if error == nil {
                self.data.addObject(objects!)
            }
        })
    println(userId) // this is the userId as String.
    println(self.data)  ********* // empty array.
}

i am getting an empty array data here.. I've tried this also but same thing's happening here too. :

 var profileQuery:PFQuery = PFUser.query()!
        profileQuery.whereKey("objectId", equalTo: userId)
        profileQuery.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
            if let objects = objects {
                for object in objects {
                    self.data.addObject(object)   
                }   
            }
        }

Upvotes: 0

Views: 383

Answers (2)

AlexKoren
AlexKoren

Reputation: 1605

Remember that "findObjectsInBackgroundWithBlock" happens async! You need to put any logic pertaining to the data inside of the block.

var profileQuery:PFQuery = PFUser.query()!
profileQuery.getObjectInBackgroundWithId(userId, block: { (objects, error) -> Void in
    if error == nil {
        self.data.addObject(objects!)
        println(self.data) //shouldn't be empty.
    }
})

Upvotes: 1

dangnabit
dangnabit

Reputation: 664

Putting aside why you're using an NSMutableArray for a singular PFUser object—you're basically expecting to see self.data populated in the wrong location. The user would be added to it (assuming a successful retrieval), inside the closure. So do something like:

var data:NSMutableArray = NSMutableArray()
func loadData() {
    data.removeAllObjects()

    var profileQuery:PFQuery = PFUser.query()!
    profileQuery.getObjectInBackgroundWithId(userId, block: { (objects, error) -> Void in
        if error == nil {
            self.data.addObject(objects!)
            println(self.data)  //...shouldn't be empty here
        } else {
            println("Error retrieving user: \(error.description")
        }
    })
}

Upvotes: 0

Related Questions