Ios 尽管有“核心数据”,表视图仍为空;成功保存&引用;
然后单击“登录”按钮进入登录屏幕 下一步,我转到屏幕上的表视图。。。这是我成功登录时的外观: 接下来,我点击AddResident图标(带有人物和加号的小图标),我得到了这个页面,我可以在其中注册一个居民 接下来,应该发生的是,当我单击add按钮时,它应该“成功保存”我的核心数据,并且它应该自动关闭此视图并返回到“Table view Screen”(上一张图片)。但事实并非如此!当它进入表格视图屏幕时,它应该使用名称“Bob”和年龄“45”成功注册新的居民,并将其保存在我的核心数据中。请帮我解决这两个问题 这是使用核心数据保存数据的视图控制器。当我点击“添加”按钮时,我得到“成功保存”Ios 尽管有“核心数据”,表视图仍为空;成功保存&引用;,ios,swift,xcode,Ios,Swift,Xcode,然后单击“登录”按钮进入登录屏幕 下一步,我转到屏幕上的表视图。。。这是我成功登录时的外观: 接下来,我点击AddResident图标(带有人物和加号的小图标),我得到了这个页面,我可以在其中注册一个居民 接下来,应该发生的是,当我单击add按钮时,它应该“成功保存”我的核心数据,并且它应该自动关闭此视图并返回到“Table view Screen”(上一张图片)。但事实并非如此!当它进入表格视图屏幕时,它应该使用名称“Bob”和年龄“45”成功注册新的居民,并将其保存在我的核心数据中。请
非常感谢 我认为您的
if details.count>=1
逻辑中存在问题,可能您想编写if details.count>=0
。我尝试了。。。即使details.count为零并且除此之外没有任何更改,也会显示该表。
// 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
}
}
}
//
// 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)
}
}