how to update data in tableview (Swift)

47,351

One Issue:

After you update the first array. You need to update the data too. It doesn't get updated automatically. so your code could look like

func refresh(){
    data = [firstArray, ["4","5"]]
    print("refreshed")
    self.tableView.reloadData()
    self.refresher.endRefreshing()
}

Feedback:

Instead of using a variable outside of classes, its better to use a singleton class. It looks like this:

class Singleton: NSObject {
    static let sharedInstance = Singleton()
    var firstArray = []
}

You can update/retrive the array like

Singleton.sharedInstance.firstArray
Share:
47,351
Jana
Author by

Jana

Updated on May 11, 2020

Comments

  • Jana
    Jana almost 4 years

    I have two Swift files: NotificationsViewController and ViewController. The firstArray is updated in the ViewContoller when a button is tapped. I was able to print the updated data. However, when I switch back to NotificationsViewController the tableview is not updated when I pull to refresh.

    NotificationsViewController:

    import Foundation
    import UIKit
    
    var  firstArray : [String] = ["123","1234"]
    
    class NotificationsViewController: UITableViewController {
    
    
        var refresher: UIRefreshControl!
    
        var data: [[String]] = [firstArray, ["4","5"]]
    
        func refresh(){
    
            print("refreshed")
            self.tableView.reloadData()
            self.refresher.endRefreshing()
    
        }
    
        override func viewDidLoad() {
    
    
            refresher = UIRefreshControl()
            refresher.attributedTitle = NSAttributedString(string: "pull to refresh")
    
            refresher.addTarget(self, action: #selector(NotificationsViewController.refresh), forControlEvents: UIControlEvents.ValueChanged)
            self.tableView.addSubview(refresher)
            refresh()
    
    
            super.viewDidLoad()
            self.tableView.editing = true
    
        }
    
        override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
          return data.count
    
        }
        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    
    
    
            return data[section].count
    
        }
    
    
        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell: UITableViewCell = UITableViewCell(style: .Subtitle, reuseIdentifier: "tableCell")
    
            cell.textLabel?.text = data[indexPath.section][indexPath.row]
    
            return cell
        }
    
        override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
            if editingStyle == .Delete {
    
                data[indexPath.section].removeAtIndex(indexPath.row)
                tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
    
    
    
            }
        }
    
    }
    

    ViewController:

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
    
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        @IBAction func button(sender: AnyObject) {
                  firstArray.append("522")
                  print(firstArray)
    
        }
    
    
    }
    

    I tried this but it did not work too.

    Updated :

    How can I update a value of cell.detailTextLabel?.text that is based on another array?

    Thank you in advance