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