gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:50:21 26 4
gpt4 key购买 nike

我下面的代码使用核心数据将实体添加到 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com