Отображение UIAlertController при наличии NSConstraintConflict - PullRequest
0 голосов
/ 08 сентября 2018

Я вставляю данные в мой стек CoreData (который имеет только одну сущность с несколькими атрибутами). В XCode я установил атрибут " PatientID " как уникальное ограничение. При попытке добавить новую запись, это делает как ожидалось и выдает ошибку в консоли XCode (NSConstraintConflict). Однако в приложении ничего не отображается.

Как бы я добавил добавленный UIAlertController, чтобы указать, что это повторяющаяся запись?

Моя текущая функция для сохранения в CoreData выглядит следующим образом:

func save(newID: String, newDOB: String, newAge: String, newGender: String, newHeight: String, newWeight: String, newRace: String, newADLS: String) {

    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
        return
    }

    // 1
    let managedContext = appDelegate.persistentContainer.viewContext

    // 2
    let entity = NSEntityDescription.entity(forEntityName: "Patient", in: managedContext)!

    let person = NSManagedObject(entity: entity, insertInto: managedContext)

    // 3
    person.setValue(newID, forKeyPath: "patientID")
    person.setValue(newDOB, forKey: "dob")
    person.setValue(newAge, forKey: "age")
    person.setValue(newGender, forKey: "gender")
    person.setValue(newHeight, forKey: "height")
    person.setValue(newWeight, forKey: "weight")
    person.setValue(newRace, forKey: "race")
    person.setValue(newADLS, forKey: "adls")

    // 4
    do {
        try managedContext.save()
        dismiss(animated: true, completion: nil)

        //No need for this - this occurs appends during viewWillAppear
        //ids.append(person)

    } catch let error as NSError {
        print("Could not save. \(error), \(error.userInfo)")
    }

}

1 Ответ

0 голосов
/ 08 сентября 2018

Вы можете получить все записи перед каждой вставкой и убедиться, что новый PatientID не существует до вставки и, если существует, показать предупреждение

после извлечения массива

if fetchedArray.map{$0.patientID}.contains(newID) {
   // show alert here as id exists
   return
}
// proceed in saving the new record 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...