rob rob - 28 days ago 18
HTML Question

Cell not showing updated JSON without html tags with SWIFT 3

I have a project, that is using Alamofire, Swift and Xcode. I have the data coming from a web url as JSON. The JSON comes in fine but in my cell, it still shows the html tags, but when I print to the console the HTML tags are not there. I am sure I am doing something wrong at cell level in the code but can't seem to see what it is.The code is below: Any help?

CODE

import UIKit
import Alamofire

struct postinput {
let mainImage : UIImage!
let name : String!
let author : String!
let summary : String!


}


class TableViewController: UITableViewController {

var postsinput = [postinput]()

var mainURL = "https://www.example.com/api"

typealias JSONstandard = [String : AnyObject]

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
callAlamo(url: mainURL)
}

func callAlamo(url : String){
Alamofire.request(url).responseJSON(completionHandler: {
response in

self.parseData(JSONData: response.data!)


})

}

func parseData(JSONData : Data) {
do {
var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONstandard
// print(readableJSON)

if let posts = readableJSON["posts"] as? [JSONstandard] {
for post in posts {
let title = post["title"] as! String

let author = post["author"] as! String

guard let dic = post["summary"] as? [String: Any], let summary = dic["value"] as? String else {
return
}
let str = summary.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)
print(str)




print(author)

if let imageUrl = post["image"] as? String {
let mainImageURL = URL(string: imageUrl )
let mainImageData = NSData(contentsOf: mainImageURL!)
let mainImage = UIImage(data: mainImageData as! Data)

postsinput.append(postinput.init(mainImage: mainImage, name: title, author: author, summary: summary))
}
}
DispatchQueue.main.async {
self.tableView.reloadData()
}
}


}


catch {
print(error)
}


}




override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return postsinput.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")

// cell?.textLabel?.text = titles[indexPath.row]

let mainImageView = cell?.viewWithTag(2) as! UIImageView

mainImageView.image = postsinput[indexPath.row].mainImage

//(cell?.viewWithTag(2) as! UIImageView).image = postsinput[indexPath.row].mainImage

let mainLabel = cell?.viewWithTag(1) as! UILabel

mainLabel.text = postsinput[indexPath.row].name

mainLabel.font = UIFont(name: "Helvetica", size:14)

let autLabel = cell?.viewWithTag(3) as! UILabel

autLabel.text = postsinput[indexPath.row].author

autLabel.font = UIFont(name: "Helvetica", size:12)

let sumLabel = cell?.viewWithTag(4) as! UILabel

sumLabel.text = postsinput[indexPath.row].summary

sumLabel.font = UIFont(name: "Helvetica", size:12)


//(cell?.viewWithTag(3) as! UILabel).text = postsinput[indexPath.row].author

return cell!
}

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


}

Answer

Here change this

let sumLabel = cell?.viewWithTag(4) as! UILabel
sumLabel.text = postsinput[indexPath.row].summary

to this

let sumLabel = cell?.viewWithTag(4) as! UILabel
let str = postsinput[indexPath.row].summary
sumLabel.text = str.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)