2

I've looked at a lot of other questions on this subject. But they all lead to the same thing "view did load" "view did appear" and "view will appear" and Ive put

tableview.reloadData()

in all of them but after dismissal of the modal view it still doesn't reload till I terminate the app and then I run again. I have seen that you can do this with notification center and have seen that Here and I tried that method but it didn't seem to work for me. Thanks for any Help in advance!!!

import UIKit

class mainScreen: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableview: UITableView!


func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
// MARK: - Table View Setup
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if allPeople.count == theAssignments.count {
        return allPeople.count
    }else {
        print("else in number of rows in section BAD")
        return allPeople.count
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "PeopleTVCell", for: indexPath)
    cell.textLabel?.text = theAssignments[indexPath.row]
    cell.detailTextLabel?.text = allPeople[indexPath.row]
    return cell
}
// MARK: - System setup
override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view, typically from a nib.
    tableview.allowsSelection = false
    /////////here
    tableview.reloadData()
}
override func viewWillAppear(_ animated: Bool) {
    ////////here
    tableview.reloadData()
}

override func viewDidAppear(_ animated: Bool) {

    let NamesObject = UserDefaults.standard.object(forKey: "Name" + whatGroup)

    if let tempItems = NamesObject as? [String] {

        allPeople = tempItems

        print("saved data in main (Name)")
    }
    let AssignmentObject = UserDefaults.standard.object(forKey: whatGroup + "Assignment")

    if let tempItems = AssignmentObject as? [String] {

        theAssignments = tempItems

        print("saved data in main (Assignments)")
    }
    ////////here
    tableview.reloadData()
}
// MARK: - the Exit Segue
@IBAction func exitSegue(segue: UIStoryboardSegue) {
    /////////here
    tableview.reloadData()
    isAddingName = 2
    print("Exited to main")
}

}

this is where I would add things

@IBAction func saveButton(_ sender: UIButton) {
    if isInMain == true {

        if IsAddingAssignment == true {
// MARK: Add Assignment
            let AssignmentObject = UserDefaults.standard.object(forKey: whatGroup + "Assignment")  as? [String]

            var Assignment: [String]

            if let tempItems = AssignmentObject {

                Assignment = tempItems

                Assignment.append("\(EnteredObjectTextFeild.text!)")

                print(Assignment)

            } else {

                Assignment = [EnteredObjectTextFeild.text!]
                print("user defaults error 2")
            }

            UserDefaults.standard.set(Assignment, forKey: whatGroup + "Assignment")

            EnteredObjectTextFeild.text = ""
        }else {
// MARK: Add Name
            if AllNames.contains("\(EnteredObjectTextFeild.text!)"){
                if namesForEachGroup.contains(EnteredObjectTextFeild.text!) {
                    EnteredObjectTextFeild.text = ""
                    AlertAction(Title: "Name Exists", Message: "This name already exists in this group", alerTitle: "OK")
                }else {
                    addNameToGroup()
                    EnteredObjectTextFeild.text = ""
                }
            }else {
                let NameObject = UserDefaults.standard.object(forKey: "Name")  as? [String]

                var Name: [String]

                if let tempItems = NameObject {

                    Name = tempItems

                    Name.append("\(EnteredObjectTextFeild.text!)")

                    print(Name)

                } else {

                    Name = [EnteredObjectTextFeild.text!]
                    print("user defaults error 3")
                }

                UserDefaults.standard.set(Name, forKey: "Name")
                addNameToGroup()
                EnteredObjectTextFeild.text = ""
                NamePicker.reloadAllComponents()
                AsignmentPicker.reloadAllComponents()
            }

        }
        }else if isInMain == false {
// MARK: Add Group
        if allGroups.contains("\(EnteredObjectTextFeild.text!)"){
                EnteredObjectTextFeild.text = ""
                AlertAction(Title: "Group Exists", Message: "This Group already exists", alerTitle: "OK")
        }else {
            let groupsObject = UserDefaults.standard.object(forKey: "Groups")  as? [String]

            var groups: [String]

            if let tempItems = groupsObject {

                groups = tempItems

                groups.append(EnteredObjectTextFeild.text!)

                print(groups)

            } else {

                groups = [EnteredObjectTextFeild.text!]
                print("Bad")
            }

            UserDefaults.standard.set(groups, forKey: "Groups")

            EnteredObjectTextFeild.text = ""


        }
        NamePicker.reloadAllComponents()
        AsignmentPicker.reloadAllComponents()
    }
    NamePicker.reloadAllComponents()
    AsignmentPicker.reloadAllComponents()
    }
// MARK: Add Name func
func addNameToGroup(){
    let nameObject = UserDefaults.standard.object(forKey: "Name" + whatGroup)  as? [String]

    var NameForGroup: [String]

    if let tempItems = nameObject {

        NameForGroup = tempItems

        NameForGroup.append("\(EnteredObjectTextFeild.text!)")

        print(NameForGroup)

    } else {

        NameForGroup = [EnteredObjectTextFeild.text!]
        print("user defaults error 4")
    }

    UserDefaults.standard.set(NameForGroup, forKey: "Name" + whatGroup)
    namesForEachGroup = NameForGroup
    print("saved to group")
    EnteredObjectTextFeild.text = ""
    NamePicker.reloadAllComponents()
    AsignmentPicker.reloadAllComponents()
}

and this is where I get back to the first VC

@IBAction func BackPressed(_ sender: UIButton) {
    if isInMain == true {

        performSegue(withIdentifier: "FromAddToMain", sender: UIButton())

    }else {

        performSegue(withIdentifier: "FromAddToGroup", sender: UIButton())

    }
}
Community
  • 1
  • 1
Mikael Weiss
  • 691
  • 1
  • 12
  • 21
  • 1
    Where from do you get your `allPeople` array? And, how it's changed? – Fahri Azimov Apr 25 '17 at 13:14
  • I left out some code but its in there – Mikael Weiss Apr 25 '17 at 13:15
  • and Its changed in the second view controller. – Mikael Weiss Apr 25 '17 at 13:15
  • 1
    Add some breakpoints to make sure that the code you think should be happening is happening. My guess is that the code to pull stuff out of userdefualts isn't working. Hope this helps! – ZappyCode Apr 25 '17 at 16:09
  • 1
    create an instance of first view controller in second and when you exit the modal reload the table view using the instance of first view controller. like if firstVC is an instance of first controller then call firstVC.tableview.reloadData() – Ayush sharma Apr 25 '17 at 16:19
  • 1
    You may need to force user defaults to save to disk in order for your reload code to pick up changes. Something like: UserDefaults.standard.synchronize() though I thought that wasn't required anymore. – David Weiss Apr 25 '17 at 17:39

2 Answers2

1

The simplest solution is how to pass the data in a undwin-perform, the configuration is; a function is created in the parent controller that will be the one that receives the execution focus:

  @IBAction func close (segue: UIStoryboard) {
     tableView.reload ()
  }

Then in the son controller the undwin is created segue (backwards) assigning the close function previously created, and in the output function execute the line.

performsegue (whithIdentifier: "undwinSegueclose", sender: self)
0

I added this code to each exit segue

theAssignments = UserDefaults.standard.array(forKey: whatGroup + "Assignments") as! [String]
Mikael Weiss
  • 691
  • 1
  • 12
  • 21