gooberboobbutt
gooberboobbutt

Reputation: 787

How to show array from parse.com in a textview inside of a uitableviewcell?

Trying to display an array pulled from parse.com in a textview inside of a uitableviewcell. Everything else is showing but I can't seem to get a array to display in a textview. This is the code I have. I'm getting fatal error: Array index out of range for myCell2.feedbacktextview.text = feedback![indexPath.row]

var feedback: [String]?
override func viewDidLoad() {
    super.viewDidLoad()

    var query = PFQuery(className: "Post")
     query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in

            if error == nil {

            if let objects = objects  {
                 if object.objectForKey("Comments") != nil {

                   self.feedback = object.objectForKey("Comments") as! [String]

                    }
                   self.tableView.reloadData()
 }}}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

     let myCell2 = tableView.dequeueReusableCellWithIdentifier("feedcell1", forIndexPath: indexPath) as! YourAdviseControllerCell
      myCell2.feedbacktextview.text = feedback![indexPath.row]
      return myCell2
}

edit: self.imageFiles.append(object["imageFile1"] as! PFFile)

                    self.imageFiles2.append(object["imageFile2"] as! PFFile)

                    self.usernames.append(object["message"] as! String)

                    self.usernames2.append(object["declaration"] as! String)

                    self.usernames3.append(object["whichbutton"] as! String)

Upvotes: 0

Views: 90

Answers (1)

kandelvijaya
kandelvijaya

Reputation: 1585

Basically what you did is intentionally correct but a fair share of small mistakes are left to correct. The takeaway would be never use forced unwrapping when possible.

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

 let myCell2 = tableView.dequeueReusableCellWithIdentifier("feedcell1", forIndexPath: indexPath) as! YourAdviseControllerCell
  //This below line fetches the value from feedback if it has else gives ""
  myCell2.feedbacktextview.text = feedback?[indexPath.row] ?? ""
  return myCell2
}

That would solve the problem for now but i see if this code gets called when then you might be returning some valid values from the numberOfRowsInCells method without respect to the feedback value. Ideally i would do something like this:

var feedback:[String]?

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return feedback?.count ??  0
}

Even then there is a slight problem i guess. Don't call tableView.reloadData() from a block which is executing in a separate thread or queue. Do all the work in main queue.

  if object.objectForKey("Comments") != nil {

               self.feedback = object.objectForKey("Comments") as! [String]

                }
     dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.tableView.reloadData()
    })
   }

Hope it helps! Cheers!

Upvotes: 0

Related Questions