Dan Levy
Dan Levy

Reputation: 4271

Array of Parse Pointers (Swift) - is This Possible

I am working on an app where the user is connected (in) multiple school classes. Since a student will be in more than one class, am I able to set an array of pointers to an individual user or is that not possible (maybe a relation is better)? Here is my code:

let classPointerQuery = PFQuery(className: "Classes")
                            classPointerQuery.whereKey("class_name", equalTo: self.classNameTextField.text!)

                            let classQuery = PFQuery.orQueryWithSubqueries([classPointerQuery])

                            classQuery.findObjectsInBackgroundWithBlock({ (results: [PFObject]?, error: NSError?) -> Void in

                                if let objects = results {

                                    for object in objects {

                                        let userInfo = PFUser.currentUser()!

                                        userInfo["my_classes"] = object

                                        userInfo.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in

                                            if error != nil {

                                                spinningActivity.hideAnimated(true)

                                                self.displayAlert("Error", message: error!.localizedDescription)

                                            } else if success {

                                                spinningActivity.hideAnimated(true)

                                                self.dismissViewControllerAnimated(true, completion: nil)

                                            } else {

                                                spinningActivity.hideAnimated(true)

                                                self.displayAlert("Something Went Wrong", message: "Please try again")

                                            }

                                        })

                                    }

                                }

                            })

* Note: I also tried changing - userInfo["my_classes"] = object - to - userInfo["my_classes"] = [object] - and got an error, "invalid type for key my_classes, expected *Classes, but got array (Code: 111, Version: 1.12.0)"

What I am doing here is querying for the object of the class that I want - lets say the user wants to add the class "Physics" - the query queries for the "class_name" in the Parse class "Classes" and spits out the object. This object is then set the current user's "my_classes" -> a pointer object. I there a way, when the user wants to add "Calculus" that the pointer object in Parse will have 2 pointers instead of replacing the current pointer?

Thanks in advance for the help!

Upvotes: 0

Views: 364

Answers (1)

Mazel Tov
Mazel Tov

Reputation: 2182

you cant store Pointers in array, you can store objectID in the array as string and do the query like that.... the general rule is that u use Pointers for 1:many relationships in database and Relations in many:many...

Update 1 - Saving objectID to Array in Parse

PFUser.currentUser()!.addObject(somePFObject.objectID!, forKey: "my_classes")

for queries you will than use containedIn

querySetup.whereKey("class", containedIn: array)

Upvotes: 1

Related Questions