ios - 核心数据未在 TableView 中获取

标签 ios swift uitableview core-data fetch

我下面的代码使用核心数据将实体添加到 TableView 中。问题是,当我点击按钮添加新条目时,数据不会显示在表格 View 上。但如果我退出模拟器并重新安装应用程序,实体就在那里。要显示实体,我必须输入它,然后重新安装应用程序才能显示实体。

  import UIKit
            import CoreData

    class ViewController: UIViewController {
        @IBOutlet var rot: UITableView!
        @IBOutlet var enterName: UITextField!
        var people : [NSManagedObject] = []
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
            showdata()
        }

        @IBAction func iDontLikeSchool(_ sender: Any) {

            if(enterName.text?.isEmpty)! {
                alertmsg(name: "d")
                showdata()
            } else {
                saveData(name: enterName.text!)
            }}

        func alertmsg(name:String){
            let alert = UIAlertController(title: "D", message: "d", preferredStyle: UIAlertControllerStyle.alert)
            alert.addAction(UIAlertAction(title: "ok", style: UIAlertActionStyle.default, handler: nil))
            self.present(alert, animated: true, completion: nil)
        }

        func saveData(name: String) {
            guard let appDelage = UIApplication.shared.delegate as? AppDelegate else {
                return
            }
            let managedContext = appDelage.persistentContainer.viewContext

            let ee = NSEntityDescription.entity(forEntityName: "PersonalInfo", in: managedContext)!

            let person = NSManagedObject(entity : ee , insertInto: managedContext)
            person.setValue(name, forKey: "userName")

            do {
                try managedContext.save()
                people.append(person)
                alertmsg(name: "saved")
                enterName.text = ""
            }
            catch let err as NSError {
                print("judo",err)
            }
            ///
        }

        func showdata() {
            guard let appDelage = UIApplication.shared.delegate as? AppDelegate else {
                return
            }
            let managedContext = appDelage.persistentContainer.viewContext

            let fetchReuqst = NSFetchRequest<NSManagedObject>(entityName: "PersonalInfo")
            do {
                people = try managedContext.fetch(fetchReuqst)

                if people.count == 0 {

                } else {

                }}
            catch let err as NSError {
                print("judo", err)
            }
            ///
        }
        }


    extension ViewController: UITableViewDataSource, UITableViewDelegate{
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

            let cell = rot.dequeueReusableCell(withIdentifier: "Person")
            let personn = people[indexPath.row]

            cell?.textLabel?.text = personn.value(forKey: "userName") as? String

            return cell!

        }
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return people.count
        }
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        }
        }

最佳答案

该条目不显示的原因是您没有告诉 View 您的模型已更改,因此它不会自行刷新。 tableView 在 viewDidLoad 上渲染一次,这就是为什么在重新加载 View 后(应用程序重新启动后)数据能够正确显示的原因。

要解决此问题,请将 viewController 的 tableView 作为属性(如果使用 Storyboard,则为 @IBOutlet)并调用

tableView.reloadData()

在您更改数据后,就您的情况而言,例如在 func showData() 的末尾,如下所示。

func showdata() {
    guard let appDelage = UIApplication.shared.delegate as? AppDelegate else {
        return
    }
    let managedContext = appDelage.persistentContainer.viewContext
    let fetchReuqst = NSFetchRequest<NSManagedObject>(entityName: "PersonalInfo")
    do {
        people = try managedContext.fetch(fetchReuqst)
        if people.count == 0 {
            //sth
        } else {
            // sth
        }
    } catch let err as NSError {
        print("judo", err)
    }
    tableView.reloadData()
}

关于ios - 核心数据未在 TableView 中获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48386314/

相关文章:

ios - 录制 iOS 时更改视频的最大持续时间

ios - 如何在 iOS 11+ 中录制 FLAC 格式

arrays - 在 Swift 中读取 .txt 文件的性能下降

ios - Swift 数组,文本文件?

ios - 如何在不创建 *Cell.swift 文件的情况下访问 UITableViewCell 对象

iphone - 在 XCode 4.2 中使用动态自定义 UITableViewCell,以及 Storyboards 和 UISeachDisplayController

iOS 12.4.1 发布导致 iPad 设备被苹果商店拒绝崩溃

swift - 如何在 swift 中将转义键指定为等同于按钮的键?

ios - 向 UITableViewCell : storyboard vs code 添加一个开关

ios - 链接到用户默认值的属性导致应用程序崩溃