Ios 尽管有“核心数据”,表视图仍为空;成功保存&引用;

Ios 尽管有“核心数据”,表视图仍为空;成功保存&引用;,ios,swift,xcode,Ios,Swift,Xcode,然后单击“登录”按钮进入登录屏幕 下一步,我转到屏幕上的表视图。。。这是我成功登录时的外观: 接下来,我点击AddResident图标(带有人物和加号的小图标),我得到了这个页面,我可以在其中注册一个居民 接下来,应该发生的是,当我单击add按钮时,它应该“成功保存”我的核心数据,并且它应该自动关闭此视图并返回到“Table view Screen”(上一张图片)。但事实并非如此!当它进入表格视图屏幕时,它应该使用名称“Bob”和年龄“45”成功注册新的居民,并将其保存在我的核心数据中。请

然后单击“登录”按钮进入登录屏幕

下一步,我转到屏幕上的表视图。。。这是我成功登录时的外观:

接下来,我点击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)
    }
}