Распространение ошибок проверки основных данных на пользователя

#swift #core-data #error-handling

#swift #основные данные #обработка ошибок

Вопрос:

Я пытаюсь использовать некоторые NSManagedObject методы проверки подкласса для генерации ошибок и распространения их среди пользователей (как описано в следующей статье: https://www.avanderlee.com/core-data/data-validation /)

В настоящее время я не могу определить, как получить пользовательскую ошибку из методов, которые я добавил к методу переопределения. Кажется, что я могу получить только то , что, по моему мнению , является ? NSValidationError исходит из метода суперкласса.

 extension Task {
    enum Error: Swift.Error, LocalizedError {
        case requiredField
        
        var recoverySuggestion: String? {
            switch self {
            case .requiredField:
                return "Please ensure all tasks have a last title." // I want to obtain this value in the `persist` callback
            }
        }
    }
    
    struct ErrorType: Identifiable {
        let id = UUID()
        let errorMessage: String
    }
    
    public override func validateForInsert() throws {
        try super.validateForInsert()
        try validateTitle ()
    }
    
    public override func validateForDelete() throws {
        try super.validateForDelete()
        /// Optionally a place to validate before deletion and cancel a deletion.
    }
    
    public override func validateForUpdate() throws {
        try super.validateForUpdate()
        try validateTitle()
    }
    
    private func validateTitle() throws {
        guard self.wrappedTitle.count >= 1 else {
            throw Error.requiredField
        }
    }
}

...

    func persist(_ object: NSManagedObject, completion: (String?) -> ()) {
        guard object.managedObjectContext != nil else {
            fatalError("No moc associated with object")
        }
        do {
            try object.managedObjectContext!.save()
        } catch let error as NSError {            
            completion(error.localizedDescription) // I want my custom error here!
            print("Unable to save managed object from child to parent")
        }
        if let parent = object.managedObjectContext!.parent {
            do {
                try parent.save()
            } catch let error as NSError {
                completion(error.localizedDescription) // and here!
                print("Unable to save managed object to persistent store")
            }
        }
    }

 

Я добавлю, что я совершенно новый программист, поэтому, если мой подход к этому вопросу не является разумным, я был бы очень признателен, если бы меня указали в правильном направлении. Я действительно подумал, что было бы неплохо сохранить всю логику проверки, содержащуюся в самих моделях, в отличие от огромной службы проверки.