我使用核心数据为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)")
}
}
}
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()
}
}