Проверьте, является ли текстовое поле пустым, прежде чем вставлять в CoreData - PullRequest
0 голосов
/ 26 июня 2018

У меня есть 4 UITextFields и UIButton (кнопка Сохранить). Когда я нажимаю кнопку «Сохранить», он должен добавить то, что у меня есть в моих текстовых полях, в CoreData, а также заполнить данные в UITableView. Но проблема в том, что когда я ничего не помещаю в свои TextFields и нажимаю «Сохранить», я добавляю пустой объект в мои CoreData, а также в мой UITableView.

Вот мой код:

@IBOutlet weak var productNameTextfield: UITextField!

    @IBOutlet weak var productCategoryTextField: UITextField!

    @IBOutlet weak var productDescriptionTextfield: UITextField!

    @IBOutlet weak var productPriceTextfield: UITextField!

       // Func to insert data from TextFields into DB
        func insertProduct(){

            let product = Product(context: context)
            let productUUID = UUID().uuidString
            product.id = productUUID

            if (productNameTextfield.text?.trimmingCharacters(in: .whitespaces).isEmpty)! {
                showAlertWith(title: "Name required", message: "Product name is required !")
            }
            else if (productCategoryTextField.text?.trimmingCharacters(in: .whitespaces).isEmpty)! {
                showAlertWith(title: "Category required", message: "Product Category required !")
            }
            else if (productDescriptionTextfield.text?.trimmingCharacters(in: .whitespaces).isEmpty)! {
                showAlertWith(title: "Description required", message: "Product Description required !")
            }
            else if (productPriceTextfield.text?.trimmingCharacters(in: .whitespaces).isEmpty)! {
                showAlertWith(title: "Price required", message: "Product Price required !")
            }
            else{
                guard let productPrice = (productPriceTextfield.text ?? "").isEmpty ? "0.00" : productPriceTextfield.text else { return }
                product.name = self.productNameTextfield.text!
                product.category = self.productCategoryTextField.text!
                product.prodDescription = self.productDescriptionTextfield.text!
                product.price = Float(productPrice)!
                appDelegate.saveContext()
                resetAllFields()
                showAlertWith(title: "Done", message: "Product was added with success !")
            }
        }

Вот мои CoreData:

enter image description here

А вот мой баг на интерфейсе:

enter image description here

Любая идея мне очень поможет! Спасибо!

1 Ответ

0 голосов
/ 26 июня 2018

Объект CoreData создается и вставляется в контекст, как только вы вызываете строку Product(context: context). Переместите эти строки в начало блока else:

    ...
} else {
    let product = Product(context: context)
    let productUUID = UUID().uuidString
    product.id = productUUID

    guard let productPrice = (productPriceTextfield.text ?? "").isEmpty ? "0.00" : productPriceTextfield.text else { return }
    ...
...