#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")
}
}
}
Я добавлю, что я совершенно новый программист, поэтому, если мой подход к этому вопросу не является разумным, я был бы очень признателен, если бы меня указали в правильном направлении. Я действительно подумал, что было бы неплохо сохранить всю логику проверки, содержащуюся в самих моделях, в отличие от огромной службы проверки.