Nikhil Ladhani
Nikhil Ladhani

Reputation: 13

Core Data prints saved data but not showing up on table viewcontroller

I would like to show my saved data in core data on a table view controller, the data is saved properly and prints out the details on the console but the data is noot showing up on the tableview cell, kindly please help

var charData = [SavedCharacters]()
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var name = String()
var house = String()
var ancestry = String()
var getImage = UIImage()
override func viewDidLoad() {
    super.viewDidLoad()
    getData()
}
func getData(){
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "SavedCharacters")
    request.returnsObjectsAsFaults = false
    do{
        let result = try? context.fetch(request)
        for data in result as! [NSManagedObject]
        {
            name = data.value(forKey: "name") as! String

            print(data.value(forKey: "name")as! String)
        }
    }
    tableView.reloadData()
}
override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return charData.count
}

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

    cell.nameLabel.text = charData[indexPath.row].name!
    cell.house = charData[indexPath.row].house!
    cell.ancestry = charData[indexPath.row].ancestry!
    // displaying image in table view cell
    if let imageURL = URL(string: self.charData[indexPath.row].image!) {
        DispatchQueue.global().async {
            let data = try? Data(contentsOf: imageURL)
            if let data = data {
                let image = UIImage(data: data)
                DispatchQueue.main.async {
                    cell.charImageView.image = image
                }
            }
        }
    }
    return cell
}

Upvotes: 1

Views: 31

Answers (1)

tereks
tereks

Reputation: 1298

Definitely you've forgotten to init charData in getData() method

var charData: [CharData]

func getData(){

    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "SavedCharacters")
    request.returnsObjectsAsFaults = false

    ====> charData = []

    do{
        let result = try? context.fetch(request)
        for data in result as! [CharData]
        {
            name = data.value(forKey: "name") as! String

            print(data.value(forKey: "name")as! String)

            ===> charData.append(data)
        }
    }
    tableView.reloadData()
}

Upvotes: 2

Related Questions