如何自动重新加载表视图数据源

问题描述 投票:0回答:1

我使用核心数据为iOS构建了一个简单的待办事项应用程序。我能够完全从核心数据存储和获取数据。当用户单击时,将显示带有UItextfield的添加按钮警报,当用户单击保存时,将保存数据并自动添加到表格视图。但是我无法将获取的数据自动添加到表格视图。仅当我滚动表格视图时,获取的数据才会添加到表格视图。

import UIKit
import CoreData


let appdelinstance = UIApplication.shared.delegate as! AppDelegate
class ViewController: UIViewController{

    var task: String!

    var taskarray: [Task] = [Task]()

    @IBOutlet weak var tasktableview: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        tasktableview.delegate = self
        tasktableview.dataSource = self
        getTask()

    }

    override func viewWillAppear(_ animated: Bool) {

    }


    @IBAction func addnotebtnclicked(_ sender: Any) {

        let alert = UIAlertController(title: "Add new Task", message: "Enter your task ", preferredStyle: .alert)

        let alertaction = UIAlertAction(title: "Save", style: .default) { (UIAlertAction) in
            let textfield = alert.textFields![0] as UITextField
            self.task = textfield.text
            print(self.task!)
            self.save(taskdata: self.task)
            self.getTask()
            self.tasktableview.reloadData()

        }

        alert.addTextField { (UITextField) in
            UITextField.placeholder = "Task here"
        }

        alert.addAction(alertaction)

        self.present(alert,animated: true)

    }

}    

extension ViewController:UITableViewDataSource,UITableViewDelegate
{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return taskarray.count
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "taskcell", for: indexPath)

        let taskdata = taskarray[indexPath.row]

        cell.textLabel?.text = taskdata.taskcontent!

        return cell
     }

    func save(taskdata: String?)
    {
        let managedcontext = appdelinstance.persistentContainer.viewContext

        let task = Task(context:managedcontext)

        task.taskcontent = taskdata!

        do
        {
            try managedcontext.save()
            print("Save success")
        }

        catch
        {
            print("ERROR \(error.localizedDescription)")
        }
    }



    func getTask()
    {
        let managedcontext = appdelinstance.persistentContainer.viewContext

        let fetchrequest = NSFetchRequest<Task>(entityName: "Task")

        do
        {
           taskarray =  try managedcontext.fetch(fetchrequest)
           print(taskarray[0].taskcontent!)
           tasktableview.reloadData()
        }

        catch
        {
            print("ERROR WHILE FETCHING \(error.localizedDescription)")
        }
    }               
}
ios swift uitableview
1个回答
0
投票
您不会在主线程中重新加载数据。您应该在主线程中调用UIAlertAction的getTask()

let alertaction = UIAlertAction(title: "Save", style: .default) { (UIAlertAction) in let textfield = alert.textFields![0] as UITextField self.task = textfield.text print(self.task!) self.save(taskdata: self.task) DispatchQueue.main.async { self.getTask() } }

© www.soinside.com 2019 - 2024. All rights reserved.