How can I fix the error that says no value inputs to core data?

91 Views Asked by At

I would like to save the values "title: String" and "done: Boolean" by following sentences. Title is written in textfield in Alert, and done is set as false as default. but there are errors saying no value is input to core data. How can I fix this?

import UIKit
import CoreData

class TodoListViewController: UITableViewController {
var itemArray = [Item]()


let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

override func viewDidLoad() {
    super.viewDidLoad()
   
     }


// MARK: - TableViewDataSource Methods

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return itemArray.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ToDoItemCell", for: indexPath)
    
    
    let item = Item(context: context)
    cell.textLabel?.text = item.title
    
    cell.accessoryType = item.done ? .checkmark : .none
    
    return cell
}

// MARK: - TableView Delegate Methods
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    itemArray[indexPath.row].done = !itemArray[indexPath.row].done
    
    
    tableView.deselectRow(at: indexPath, animated: true)
    tableView.reloadData()
    self.saveItems()
}
// MARK: - Add New Items
@IBAction func addButtonPressed(_ sender: UIBarButtonItem) {
    
    let alert = UIAlertController(title: "Add New Todoey Item", message: "", preferredStyle: .alert)
    var textField = UITextField()
    let newItem = Item(context: self.context)

    
    alert.addTextField { (alertTextField) in
        alertTextField.placeholder = "Create new item"
        textField = alertTextField
        
    }

    let action = UIAlertAction(title: "Add Item", style: .default) { (action) in

        print(textField.text ?? "no data")
        newItem.title = alert.textFields?.first?.text ?? ""

        newItem.done = false
        self.itemArray.append(newItem)
        print(self.itemArray)
        print(newItem)
        self.saveItems()
        self.tableView.reloadData()
        

    }
   
    alert.addAction(action)
    present(alert, animated: true, completion: nil)
}

func saveItems(){

    do {
        print("\(context)")
        try context.save()
    }catch {
        print("error, \(error)")
    }

}

Error message is as follows:

error, Error Domain=NSCocoaErrorDomain Code=1570 "title is a required value." UserInfo={NSValidationErrorObject=<Todoey.Item: 0x600000424a00> (entity: Item; id: 0x60000277c4c0 x-coredata:///Item/tA47CD9C0-9813-49C7-9594-91AFFCFE511F3; data: { done = 0; title = nil; }), NSLocalizedDescription=title is a required value., NSValidationErrorKey=title, NSValidationErrorValue=null}

It is the first time to ask a question here. If there is more detail required, please let me know.

I write in the textfield, but there is no text in tableView. but when I print , there is a right input. how app works

code of appdelegate delegate properties in viewcontroller

0

There are 0 best solutions below