0

I am trying to fetch a HomeFeed for an app, as this is my 1st major app.
I am finding it difficult fetch the JSON data and show it on my tableViewCell , particularly converting the JSON Array/Dictionary and to use it.
Any kind of help would be much appreciated and life saver !!

Here is my HomeFeedTableView class :

class HomeFeedTableView: UIViewController {


@IBOutlet weak var menuButton: UIBarButtonItem!
@IBOutlet weak var cameraBtn: UIButton!
var tableView = UITableView()


var tableAuthor = [String]()
var tableTitle = [String]()

override func viewDidLoad() {
    super.viewDidLoad()

    //cameraBtn possition
    cameraBtn.layer.zPosition = 1000

    if self.revealViewController() != nil {
        menuButton.target = self.revealViewController()
        menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
        self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
    }

    getJSON()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


// Get JSON
func getJSON(){

    let getEndPoint: String = "http://myURL/api/get_user_post/"
    Alamofire.request(getEndPoint)
        .responseJSON { response in

            guard response.result.error == nil else {
                // got an error in getting the data, need to handle it
                print("error calling GET")
                print(response.result.error!)
                return
            }

            if let value =  response.result.value {

                let json = JSON(value)
                //print(json.description)

                for items in json.dictionary! {

                    //let author: String? = anItem["author"].stringValue
                    //let title: String? = anItem["title"].stringValue
                    //self.tableAuthor.append(author!)
                    //self.tableTitle.append(title!)

                    print(items)

                }



                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
            }
    }

}

// MARK: - Table view data source

 func numberOfSectionsInTableView(_ tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return status.count
}


 func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell {
    // Configure the cell...

    let cell: HomeFeedTableViewCell = tableView.dequeueReusableCell(withIdentifier: "HomeCell") as! HomeFeedTableViewCell
    let img = UIImage(named: imageMain[(indexPath as NSIndexPath).row])
    cell.ImageMain.image = img
   // cell.statusMain.text = tableAuthor[indexPath.row]

    let proImg = UIImage(named: imageMain[(indexPath as NSIndexPath).row])
    cell.profileImage.image = proImg
    cell.profileImage.layer.cornerRadius = 20.00
    cell.profileImage.clipsToBounds = true

    cell.likeBtn.layer.borderWidth = 1.2
    cell.likeBtn.layer.borderColor = UIColor.gray.cgColor
    cell.likeBtn.layer.cornerRadius = 5
    cell.likeBtn.clipsToBounds = true

    cell.commentBtn.layer.borderWidth = 1.2
    cell.commentBtn.layer.borderColor = UIColor.gray.cgColor
    cell.commentBtn.layer.cornerRadius = 5
    cell.commentBtn.clipsToBounds = true

    return cell
}

@IBAction func cameraBtnClicked(_ sender: AnyObject) {
    print("Camera Clicked")
}

}

And I got this JSON response

("main_content", [
 {
   "author" : "maruf khandakar",
   "post_id" : 110,
   "post_date" : "October 3, 2016",
   "title" : "hjhjhjhjkljkhasfreiwutb cltjutjuregjre nb",
   "show_comment_number" : "0",
   "show_likes" : "0",
   "post_img" : [
  {
   "guid" : "http:\/\/myURL\/wp-content\/uploads\/2016\/10\/IMG_1475492476.jpg"
      }
],
 "author_img" : "http:\/\/myUrl\/wp-  content\/uploads\/2016\/10\/Screenshot_1-2.png",
   "post_time" : "11:01 am",
   "blog_text" : "sfdhjusolidasfjgfkdsjfdklshfj"
  },
 {
"author" : "maruf khandakar",
"post_id" : 112,
"post_date" : "October 3, 2016",
"title" : "hjhjhjhjkljkhasfreiwutb cltjutjuregjre nb0",
"show_comment_number" : "1",
"show_likes" : "1",
"post_img" : [
   {
    "guid" : "http:\/\/myUrl\/wp-  content\/uploads\/2016\/10\/IMG_1475494067.jpg"
   }
  ],
  "author_img" : "http:\/\/myURL\/wpcontent\/uploads\/2016\/10\/Screenshot_1-2.png",
  "post_time" : "11:27 am",
  "blog_text" : "sfdhjusolidasfjgfkdsjfdklshfj0"
 },
 {
  "author" : "russell99",
  "post_id" : 129,
  "post_date" : "October 24, 2016",
  "title" : "russels 1st post",
  "show_comment_number" : "0",
  "show_likes" : "0",
  "post_img" : [
    {
      "guid" : "http:\/\/myURL\/wpcontent\/uploads\/2016\/10\/IMG_1477280037.jpg"
    }
   ],
   "author_img" :    "http:\/\/muURL\/Content\/Images\/Products\/NoImageAvailable   .jpg",
   "post_time" : "3:33 am",
  "blog_text" : "russel post"
 },
 {
  "author" : "russell99",
  "post_id" : 131,
  "post_date" : "October 24, 2016",
  "title" : "russels 2nd post",
  "show_comment_number" : "0",
  "show_likes" : "0",
  "post_img" : [
    {
      "guid" :    "http:\/\/myURL\/wpcontent\/uploads\/2016\/10\/IMG_1477282075.jpg"
    }
   ],
  "author_img" :    "http:\/\/muURL\/Content\/Images\/Products\/NoImageAvailable  .jpg",
  "post_time" : "4:07 am",
  "blog_text" : "russel post 2"
}
])

as I am new to Alamofire, it's been pretty confusing for me. Please help.

1 Answer 1

1

Your JSON response is type of Array not Dictionary so set for loop this way.

for items in json.arrayValue {

    let author: String? = anItem["author"].stringValue
    let title: String? = anItem["title"].stringValue
    self.tableAuthor.append(author!)
    self.tableTitle.append(title!)
}

Note: Instead of using multiple array you need to create array of custom type like [Book] for that first you need to create custom class Book.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.