У меня есть сценарий, в котором я ожидаю, что что-то произойдет, но этого не происходит, и я не могу понять, почему. Я все еще новичок в метательных функциях, поэтому мне здесь немного любопытно. Может быть, кто-нибудь сможет объяснить, почему это произошло.
Я сделал эту функцию:
func checkExistanceOfMovieAddition(id: Int) -> Result<SavedMovieAddition, CoreDataErrors> {
let request: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: SavedMovieAddition.entityName)
request.predicate = NSPredicate(format: "movieID == \(id)")
do {
let fetch = try context.fetch(request)
if let result = fetch.first as? SavedMovieAddition {
return.success(result)
} else {
return.failure(.additionNotFound)
}
} catch {
return.failure(.fetchFailed)
}
}
И она работает как шарм. Если я ищу идентификатор, который не существует, я получаю пустой массив и возвращаю свой собственный тип ошибки. Однако ... если я изменю строку:
request.predicate = NSPredicate(format: "movieID == \(id)")
и неправильно напишу «movieID» на «movieIDs», которого нет в моей модели CoreData, приложение выйдет из строя с:
Thread 1: Exception: "keypath movieIDs not found in entity <NSSQLEntity SavedMovieAddition id=2>"
Здесь Я ожидал, что он go блок catch и вернет .fetchFailed?
Почему этого не происходит? Но вместо этого приложение вылетает? - Я думал, что весь смысл блока do-try-catch состоит в том, чтобы устранить эти сбои?
Что-то мне не хватает?