0

I'm trying to make a Query with a Pointer in Parse. I have two classes "Discover" and "DiscoveryDetails". I want to get the discovery details of an object that's picked from the discovery class.

Discovery Class enter image description here

DiscoveryDetails Class - with the discoverID as the pointer. enter image description here

The discovery objects are displayed in a DiscoveryTableView and on selecting one of the items, I want to query the objects of with an ID related to that selection in a DiscoveryDetailsTableView.

The DiscoveryTableView shows the objects as they appear in the class but the DiscoveryDetailsTableView shows all the objects instead of those related to the Cell I selected.

This is my didSelectRowAtIndexPath Code in the DiscoveryTableView:

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    tableView.deselectRowAtIndexPath(indexPath, animated: true)

                let mainStoryboard = UIStoryboard(name: "Discovery", bundle: nil)
                let discoveryDetailView = mainStoryboard.instantiateViewControllerWithIdentifier("discoveryDetailTVC") as! DiscoveryDetailTableViewController

                let object = self.objectAtIndexPath(indexPath)
                discoveryDetailView.titleString = object?.objectForKey("workoutName") as! String
                discoveryDetailView.describtionString = object?.objectForKey("workoutDetails") as! String
                discoveryDetailView.numberOfWorkouts = object?.objectForKey("numberOfWorkouts") as! Int
                discoveryDetailView.imageFile1 = object?.objectForKey("image1") as! PFFile
                discoveryDetailView.imageFile2 = object?.objectForKey("image2") as! PFFile
                discoveryDetailView.imageFile3 = object?.objectForKey("image3") as! PFFile

let row = indexPath.row //we know that sender is an NSIndexPath here.
            let selectedObj = objects![row] // some var where you hold your data
            discoveryDetailView.varInDDT = selectedObj


                self.navigationController?.pushViewController(discoveryDetailView, animated: true)

        }

In my DiscoveryDetailsTableView I have this code:

var titleString: String!
    var describtionString: String!
    var numberOfWorkouts: Int!
    var imageFile1: PFFile!
    var imageFile2: PFFile!
    var imageFile3: PFFile!
   var varInDDT : PFObject?

    //MARK: Query for Table with the details
override func queryForTable() -> PFQuery {

    let discoveryQuery = PFQuery(className: "DiscoveryDetails")
    discoveryQuery.cachePolicy = .CacheElseNetwork
    discoveryQuery.whereKey("discoveryID", equalTo: PFObject(withoutDataWithClassName: "Discovery", objectId: "\(varInDDT!.objectId!)"))
    discoveryQuery.orderByDescending("createdAt")
    return discoveryQuery

}

override func viewDidLoad() {
        super.viewDidLoad()

        //Header Display
        let imagesArray = [imageFile1, imageFile2, imageFile3]
        let imagePicked = randomIntergerInRange(0, high: imagesArray.count)

        titleLabel.text = titleString.uppercaseString
        self.subtitleLabel.text = describtionString
        self.numberOfWorkoutsLabel.text = "\(numberOfWorkouts!) Workouts"

        //Pick a random Image from the Images
        imagesArray[imagePicked].getDataInBackgroundWithBlock({ (imageData, error) -> Void in
            if error == nil
            {
                if let imageData = imageData
                {
                    let image = UIImage(data:imageData)
                    self.backgroundImage.image = image
                }
            }
        })

...

}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {

var discoveryDetailItemsCell:DiscoveryDetailTableViewCell! = tableView.dequeueReusableCellWithIdentifier("DiscoveryDetailTableViewCell") as? DiscoveryDetailTableViewCell

...

discoveryDetailItemsCell.titleLabel.text = object?.objectForKey("exerciseName") as? String
        discoveryDetailItemsCell.titleLabel.textColor = UIColor.whiteColor()

        discoveryDetailItemsCell.durationAndSetsLabel.text = "\((object?.objectForKey("durationOrSets"))!)"
        discoveryDetailItemsCell.minAndSetLabel.text = "mins"


...

return discoveryDetailItemsCell

}

There may be similar questions out there but I have not found anything that answers this or I am probably not seeing my mistake clearly.

Thanks for the help in advance. :)

1 Answer 1

1

for query with pointer U have to use query like that

let discoveryQuery = PFQuery(className: "DiscoveryDetails")
discoveryQuery.cachePolicy = .CacheElseNetwork 
discoveryQuery.whereKey("discoveryID", equalTo: PFObject(withoutDataWithClassName: "Discovery", objectId: "\(varInDDT!.objectId!)"))
discoveryQuery.orderByDescending("createdAt")
return discoveryQuery

for downloading the detail you have to pass at least ID of the object you want to download from the first viewController to the second or you can pass the whole PFObject

DiscoveryTableView

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    self.performSegueWithIdentifier("showDetail", sender: indexPath)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if(segue.identifier == "showDetail"){ // define the segue Name
    let controller = (segue.destinationViewController as! DiscoveryDetailTableViewController)
    let row = sender!.row //we know that sender is an NSIndexPath here.
    let selectedObj = discoveryObjects[row] // some var where you hold your data
    controller.varInDDT = selectedObj
  }
}

and define the var of PFObject in detailVC

DiscoveryDetailTableViewController

var varInDDT : PFObject?
Sign up to request clarification or add additional context in comments.

2 Comments

I have modified my question based on the code you posted. It fortunately has cleared the DiscoveryDetailsTableView of showing all the objects but it weirdly does not pull the objects from DiscoveryDetails Class leaving the tableview empty. Not sure why!
Sorry about that. My network was bad. Worked like a charm. Thanks a lot.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.