Мой первый экран
Затем я 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)
}
}
Спасибо большое !!!