Если ошибка оператора let

Im пытается построить список задач с coreData, моя цель состоит в том, чтобы иметь всплывающее уведомление об ошибке, если пользователь пытается просто нажать кнопку «Добавить» без ввода текста в текстовом поле.
В настоящее время у меня есть всплывающее уведомление работает, но как только я уволить уведомление, а затем добавить текст в текстовое поле и нажмите кнопку «добавить», приложение аварийно завершает работу.

@IBAction func addBtnTaskPressed(_ sender: Any) {
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    let task = Task(context: context)

    //have to add an if let here.
    if let text = textField.text, !text.isEmpty{
        task.name = textField.text
        //save data to coredata
        (UIApplication.shared.delegate as! AppDelegate).saveContext()
    } else {
    let alert = UIAlertController(title: "Error:", message: "Cannot Add Empty Task", preferredStyle: UIAlertControllerStyle.alert)
    alert.addAction(UIAlertAction(title: "Continue", style: UIAlertActionStyle.default, handler: nil))
    self.present(alert, animated: true, completion: nil)
    }

}

1 ответ

  1. Я думаю, что вы не спасаете coreData должным образом. Попробуйте это (я не протестировал его, Хотя)

    @IBAction func addBtnTaskPressed(_ sender: Any) {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.managedObjectContext
        let entity =  NSEntityDescription.entity(forEntityName: "Task", in: context)
        let task = NSManagedObject(entity: entity!, insertInto: context) as! Task
    
    
        //have to add an if let here.
        if let text = textField.text, !text.isEmpty{
        task.name = textField.text
        //save data to coredata
           do {
               try context.save()
               print("saved!")
           } catch let error as NSError  {
            print("Could not save \(error), \(error.userInfo)")
           }        
        } else {
        let alert = UIAlertController(title: "Error:", message: "Cannot Add Empty     Task", preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: "Continue", style: UIAlertActionStyle.default, handler: nil))
        self.present(alert, animated: true, completion: nil)
      }
    }