0

I am using a PFQueryTableViewController to try to load data into a tableview.

EDIT: link to photo referred to just below: http://i61.tinypic.com/x5626a.png

To my knowledge everything is set up correctly, but when running in the simulator, no images or text appear. The query loads the correct number of cells though: There are 14 objects in my "Post" class, and the simulator loads 14 table cells, but they all just appear as in the photo above. There are also 2 labels in the tableview (which I pre-populated in the attributes inspector with text) and that text doesn't show up either.

EDIT 2:

I have figured out how to display text in the cell, but I can not get how to display the image. This is my code in my cellForRowatIndexPath:

   override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject!) -> PFTableViewCell? {
    //4
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell1", forIndexPath: indexPath) as! DataCell

    let Postobject1 = object as! Post

    cell.shortDescriptionLabel.text = Postobject1["short_decription"] as? String
    cell.userUsername.text = Postobject1["user2"] as? String

    var thumbnail: PFFile = Postobject1["fichierimage"] as! PFFile
    cell.contentImage.file = thumbnail




    return cell

  }

the code works correctly to display the strings, shortDescriptionLabel and userUserName. But it does not work to load the image. I took this code:

    var thumbnail: PFFile = Postobject1["fichierimage"] as! PFFile
    cell.contentImage.file = thumbnail

from the Parse site, here: http://i60.tinypic.com/2ziq0hu.png

however when I clicked "swift" it said there is no swift example, so that is my translation of the code. I've never programmed in Obj-C before so maybe I translated it wrong. Could someone help with a swift translation please?

jjjjjjjj
  • 4,203
  • 11
  • 53
  • 72
  • post the code of `loadObjects()` – iRiziya Sep 11 '15 at 12:06
  • debug, when you update the cell log it and its subviews to see what they contain, then log the outlets to check they're connected – Wain Sep 11 '15 at 12:15
  • @iRealMe loadObjects() is, (if I'm not mistaken) a built in method for PFQueryTableViewControllers, similar to tableView.reloadData() for regular UItableviews. – jjjjjjjj Sep 11 '15 at 12:28
  • @Wain I will try to do that and post the results – jjjjjjjj Sep 11 '15 at 12:28
  • @Wain could you please see my edit? – jjjjjjjj Sep 11 '15 at 14:35
  • UIImageView doesn't implement `file`. I think that must be some third party category that performs a load. Some part of your code must fetch the file's contents, format the result as an image, and assign that image to the image view's image property. Many examples of that on SO. – danh Sep 11 '15 at 14:56

1 Answers1

0

I have finally found an answer after about 9 hours. I will post all of the details here for people who find this in the future. Hopefully they won't struggle as long as I did :)

The goal was to load 2 images and 2 Strings from my class "Post" in Parse, and display these in a PFTableViewCell. One of these images was from relational data, from a pointer in the "Post" class.

Here is my code for my "Post" PFObject class:

        import Foundation
        import Parse
        import ParseUI
        import UIKit

    class Post: PFObject, PFSubclassing {

@NSManaged var image: PFFile

@NSManaged var short_decription: String?




//1
class func parseClassName() -> String {
    return "Post"
}

//2
override class func initialize() {
    var onceToken: dispatch_once_t = 0
    dispatch_once(&onceToken) {
        self.registerSubclass()
    }
}

override class func query() -> PFQuery? {
    let query = PFQuery(className: Post.parseClassName())
    query.includeKey("from_user")
    query.orderByDescending("createdAt")
   // query.whereKey("early_semester", equalTo: true)
    return query
}

   init(short_decription: String?) {
    super.init()








}

 override init() {
    super.init()



    }

 }

Here is the code for my tableCell:

    import UIKit
    import ParseUI
    import Parse

  class DataCell: PFTableViewCell {


@IBOutlet weak var shortDescriptionLabel: UILabel!

@IBOutlet weak var UserProfilePhoto: PFImageView!

@IBOutlet weak var contentImage: PFImageView!
@IBOutlet weak var userUsername: UILabel!



 }

Here is the code for my PFQueryTableViewController:

     import UIKit
     import Parse
     import ParseUI
     import Foundation

     class new: PFQueryTableViewController {

// MARK: - Lifecycle
override func viewDidLoad() {
    super.viewDidLoad()
   loadObjects()
}

//1
override func viewWillAppear(animated: Bool) {

    loadObjects()

}

//2
override func queryForTable() -> PFQuery {
    let query = Post.query()
    return query!

}

//3
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject!) -> PFTableViewCell? {
    //4
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell1", forIndexPath: indexPath) as! DataCell



    let PostObject = object as! Post


     // assign label in tablecell text from my "Post" class 
    cell.shortDescriptionLabel.text = PostObject["short_decription"] as? String
    cell.userUsername.text = PostObject["user2"] as? String

    // loading image saved in my "Post" class
    var thumbnail: PFFile = PostObject["fichierimage"] as! PFFile
    cell.contentImage.file = thumbnail
    cell.contentImage.loadInBackground()


    /* loading image that is relational data. My "Post" class has
   a pointer column "from_user" that points to the "User" class,
     and this is loading the profile photos from the User class. 
   this is possible because I used  "query.includeKey("from_user")" in my query.*/

    var profilePhoto: PFFile = PostObject.objectForKey("from_user")!.objectForKey("profilePicture") as! PFFile
    cell.UserProfilePhoto.file = profilePhoto
    cell.UserProfilePhoto.loadInBackground()

    return cell

 }



  }
jjjjjjjj
  • 4,203
  • 11
  • 53
  • 72