Табличное представление остается пустым, несмотря на то, что основные данные "успешно сохранены!" - PullRequest
1 голос
/ 26 апреля 2020

Мой первый экран

Затем я go на экране входа в систему, нажав кнопку «Войти».

Мой экран входа

Далее я go на экране с табличным представлением ... Вот как это выглядит при успешном входе в систему:

Экран табличного представления

Далее я нажимаю на значок добавления резидента (маленький значок с человеком и знаком плюс), и я получаю эту страницу, на которой я могу зарегистрировать резидента.

Регистрация экрана резидента

Далее, что должно произойти, когда я нажимаю кнопку добавления, он должен «успешно сохранить» мои основные данные, и он должен автоматически отклонить это представление и вернуться к «Экрану представления таблицы» (Предыдущее изображение ). Но это не так! Когда он переходит на экран просмотра таблицы, он должен зарегистрировать нового резидента с именем «Боб» и возрастом «45», успешно сохраненными в моих основных данных. Пожалуйста, помогите мне решить эти 2 проблемы ...

Это контроллер представления, в котором мои данные сохраняются с использованием основных данных. Я получаю «успешно сохраненные», когда нажимаю кнопку «Добавить».

//  ResidentViewController.swift
//  77 Safety Updater
//
//  Created by Tejas Ravishankar on 17/04/20.
//  Copyright © 2020 Tejas Ravishankar. All rights reserved.
//
//MARK:- Import Modules
import UIKit
import CoreData
let appDelegate = UIApplication.shared.delegate as? AppDelegate

class ResidentViewController: UIViewController {
//MARK:- Variables
    var residentCount : Int = 0
    var travelSwitchIsOn : Bool = false
    var movedInSwitchIsOn : Bool = false
    var stateColor : UIColor = .systemGreen
    var name : String = ""
    var age : Int = 0
    var type : Int = 0
    var risk : String = ""
//MARK:- IB Outlets
    @IBOutlet weak var nameTextField: UITextField!
    @IBOutlet weak var riskLabel: UILabel!
    @IBOutlet weak var ageTextField: UITextField!
    @IBOutlet weak var workingSwitch: UISwitch!
    @IBOutlet weak var movedInSwitch: UISwitch!
    @IBOutlet weak var movedInLabel: UILabel!
    @IBOutlet weak var yesLabel: UILabel!
    @IBOutlet weak var noLabel: UILabel!
//MARK:- Add Button Action
    @IBAction func addButtonPressed(_ sender: UIButton)
    {
        residentCount += 1
        let ageText = ageTextField.text
        if ageText!.count >= 4
        {
            ageTextField.text = ""
            ageTextField.placeholder = "Invalid Age!"
        }
        name = nameTextField.text!
        age = Int(ageText!)!
        travelSwitchIsOn = workingSwitch.isOn
        movedInSwitchIsOn = movedInSwitch.isOn
        if movedInSwitchIsOn == true || travelSwitchIsOn == true
        {
            risk = "Medium"
        }
        else if movedInSwitchIsOn == true && travelSwitchIsOn == true
        {
            risk = "High"
        }
        else
        {
            risk = "Low"
        }
        if age <= 4
        {
            stateColor = .systemRed
        }
        if age <= 20
        {
            stateColor = .systemGreen
        }

        else if age >= 55 && age <= 90
        {
            stateColor = .systemRed
        }

        else if age > 90
        {
            stateColor = .systemPurple
        }
        if nameTextField.text != "" && ageTextField.text != ""
        {
            saveData { (complete) in
                   if complete
                   {
                    self.dismiss(animated: true, completion: nil)
                   }
                   }
            }
        }

//MARK:- Core Data Save Function
    func saveData(completion:(_ finished:Bool) -> ())
    {
        guard let managedContext = appDelegate?.persistentContainer.viewContext
            else
        {
            return
        }


        let data = UserData(context: managedContext)
        data.name = name
        data.age = Int32(age)
        data.risk = risk

        do {
            try managedContext.save()
            print("Successfully Saved!")
            completion(true)
            }
        catch {
            debugPrint("Save Failed: \(error.localizedDescription)")
              }
    }

//MARK:- Resident Type Action
    @IBAction func residentTypeChanged(_ sender: UISegmentedControl)
    {
        let type = sender.selectedSegmentIndex

        if type == 0
        {
            movedInSwitch.isHidden = true
            movedInLabel.isHidden = true
            yesLabel.isHidden = true 
            noLabel.isHidden = true
        }
        if type == 1
        {
            movedInSwitch.isHidden = false
            movedInLabel.isHidden = false
            yesLabel.isHidden = false
            noLabel.isHidden = false
        }

    }

//MARK:- When App Screen Loads Up
    override func viewDidLoad()
    {
        super.viewDidLoad()
        movedInSwitch.isHidden = true
        movedInLabel.isHidden = true
        riskLabel.text = ""
        ageTextField.delegate = self
        yesLabel.isHidden = true
        noLabel.isHidden = true
    }
}

extension ResidentViewController : UITextFieldDelegate
{
    @IBAction func ageTextField(_ sender: UITextField)
     {
        let age = Int(ageTextField.text!)

        if age! <= 4
        {
            riskLabel.textColor = UIColor.systemGreen
            stateColor = .systemRed
            riskLabel.text = "High Risk Host!"
        }
        if age! <= 20
        {
            riskLabel.textColor = UIColor.systemGreen
            stateColor = .systemGreen
            riskLabel.text = "Low Risk Host!"
        }

        else if age! >= 55 && age! <= 90
        {
            riskLabel.textColor = UIColor.systemRed
            stateColor = .systemRed
            riskLabel.text = "High Risk Host!"
        }

        else if age! > 90
        {
            riskLabel.textColor = UIColor.systemPurple
            stateColor = .systemPurple
            riskLabel.text = "Very High Risk Host!"
        }

     }
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        ageTextField.endEditing(true)
        return true
    }
    func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
        if ageTextField.text != ""
        {
            return true
        }
        else
        {
            textField.placeholder = "Type Something!"
            return false
        }
    }
}

Это контроллер табличного представления, который содержит конфигурацию ячейки и таблицы! Я также получил данные в этом контроллере представления. В выводе: я получаю "успешно доставлено!" Не обращайте внимания на представление входа в систему controller.swift, так как оно содержит только мою аутентификацию с использованием пользовательских настроек по умолчанию ... В этом файле нет частей CoreData ...

//
//  StatisticsViewController.swift
//  77 Safety Updater
//
//  Created by Tejas Ravishankar on 17/04/20.
//  Copyright © 2020 Tejas Ravishankar. All rights reserved.
//
//MARK:- Import Modules
import UIKit
import CoreData

class StatisticsViewController: UIViewController
{
    var details : [UserData] = []

    @IBOutlet weak var informationTableView: UITableView!

    override func viewDidLoad()
    {
        super.viewDidLoad()
        informationTableView.delegate = self
        informationTableView.dataSource = self
        informationTableView.isHidden = false
        informationTableView.register(UINib(nibName: "InformationTableViewCell", bundle: nil), forCellReuseIdentifier: "informationCell")
    }

    func fetchData(completion:(_ complete:Bool) -> ())
    {
        guard let managedContext = appDelegate?.persistentContainer.viewContext
        else
        {
            return
        }

        let fetchRequest = NSFetchRequest<UserData>(entityName: "UserData")
        do {
            try managedContext.fetch(fetchRequest) as![UserData]
            print("Successfully Fetched!")
            completion(true)
        }
        catch
        {
            debugPrint("Failed To Fetch: \(error.localizedDescription)")
            completion(false)
        }
    }

    override func viewWillAppear(_ animated: Bool)
    {
        super.viewWillAppear(animated)
        self.fetchData { (complete) in
            if complete
            {
                if details.count >= 1
                {
                    informationTableView.isHidden = true
                }
                else
                {
                    informationTableView.isHidden = false
                }
            }
        }
    }
}

extension StatisticsViewController : UITableViewDelegate,UITableViewDataSource
{
    func numberOfSections(in tableView: UITableView) -> Int
    {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        details.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = informationTableView.dequeueReusableCell(withIdentifier: "informationCell") as! InformationTableViewCell
        let userDetail = details[indexPath.row]
        cell.configureCell(userDetail)
        return cell
    }
}    

Это моя ячейка табличного представления какао Сенсорный класс, в котором я настраиваю данные, хранящиеся в ячейках.

//
//  InformationTableViewCell.swift
//  77 Safety Updater
//
//  Created by Tejas Ravishankar on 26/04/20.
//  Copyright © 2020 Tejas Ravishankar. All rights reserved.
//

import UIKit
import CoreData

class InformationTableViewCell: UITableViewCell
{
    @IBOutlet weak var ageLabel: UILabel!
    @IBOutlet weak var nameLabel: UILabel!

    override func awakeFromNib()
    {
        super.awakeFromNib()
    }

    override func setSelected(_ selected: Bool, animated: Bool)
    {
        super.setSelected(selected, animated: animated)
    }

    func configureCell(_ detail : UserData)
    {
        self.nameLabel.text = detail.name
        self.ageLabel.text = String(describing: detail.age)
    }
}

Спасибо большое !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...